home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Sound / DelfMPEG / src / MP3.a56 < prev    next >
Text File  |  2000-05-16  |  80KB  |  2,739 lines

  1. ;*****************************************************************************
  2. ;
  3. ;    DelfMPEG - MPEG audio player for Delfina DSP
  4. ;    Copyright (C) 1999, 2000  Michael Henke
  5. ;
  6. ;    This program is free software; you can redistribute it and/or modify
  7. ;    it under the terms of the GNU General Public License as published by
  8. ;    the Free Software Foundation; either version 2 of the License, or
  9. ;    (at your option) any later version.
  10. ;
  11. ;    This program is distributed in the hope that it will be useful,
  12. ;    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. ;    GNU General Public License for more details.
  15. ;
  16. ;    You should have received a copy of the GNU General Public License
  17. ;    along with this program; if not, write to the Free Software
  18. ;    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19. ;
  20. ;*****************************************************************************
  21.  
  22.  
  23.  
  24. ;Delfina object DSP56K_MP3
  25. ;memory map (for Amiga access)
  26. ;
  27. ; prog
  28. ;    0 .. init
  29. ;   +2 .. decode frame
  30. ;
  31. ; xdata
  32. ;+2048 .. inbuf (framedata: +0..side info, +11 words..main_data)
  33. ;+2710 .. quantab_p (512 words; allocated and precalculated by main prog)
  34. ;
  35. ; ydata
  36. ;  +16 .. busy (Amiga read only, TRUE (NON-ZERO) if decoder is running)
  37. ;  +17 .. forcemono (Amiga write)
  38. ;  +18 .. pow43tab (8206 words; precalculated by main prog)
  39. ;
  40.     include 'delfequ.inc'
  41.  
  42.     org    p:
  43. ;->prog
  44.     jmp    init
  45. ;->prog+2
  46.  
  47.  
  48.  
  49. ;*****************************************************************************
  50. ;
  51. ; **** MPEG1 layer III frame decoder ****
  52. ;
  53. ; parameters
  54. ;  x1 - mono          (mono: non_zero, stereo: zero)
  55. ;  x0 - output buffer (1152 words in L-mem)
  56. ;  y1 - modext        (from frame header: mode extension)
  57. ;  y0 - /
  58. ;
  59. ;
  60. ; uses ideas/code from:
  61. ;   - MPEG Audio Layer II decoder by Fredrik Noring and Tomas Berndtsson
  62. ;     (an mp2 player for Atari Falcon, DSP56K code)
  63. ;   - amp11 by Niklas Beisert (clean and fast C++ code)
  64. ;   - FalcAMP by Denis "STGhost" Huguet and David "Splash" Carrere
  65. ;     (an mp3 player for Atari Falcon, DSP56K code)
  66. ;   - reference code by MPEG Software Simulation Group ("the original" C code)
  67. ;
  68. ; Delfina DSP programming by Smack/Infect!
  69. ;
  70. ;
  71. ; (Sun 09-Apr-2000) - finally: it's working!!
  72. ;                     (but INTENSITY STEREO decoding is not implemented yet)
  73. ; (Wed 26-Apr-2000) - optimized synthesis and hybrid filter routines
  74. ; (Sat 29-Apr-2000) - optimized huffman decoding routines
  75. ; (Tue 16-May-2000) - started implementing INTENSITY STEREO support
  76. ;                     but it's not working yet (temporarily removed)
  77. ;
  78. ;*****************************************************************************
  79.  
  80.     move    x1,x:mono
  81.     move    x0,x:outbuf
  82.     move    y1,x:modext
  83.     tfr    x1,a    #>1,x1
  84.     tst    a    #>2,a
  85.     tne    x1,a
  86.     move    a,x:channels
  87.     move    a,y:busy        ;set BUSY to non-zero
  88.  
  89.     move    #>inbuf,r7
  90.     jsr    getbits_init
  91.  
  92. ; WARNING:
  93. ; the active 'getbits' routine occupies these registers: r5, r6, r7, b
  94. ; (their contents must not be changed!!)
  95. ;
  96. ; 'getbits' is used in the bitstream processing routines:
  97. ; * get side info
  98. ; * read scalefactors
  99. ; * read huffman
  100. ;
  101. ; this register limitation does not exist in the other parts of the decoder
  102.  
  103.  
  104.  
  105. ;*****************************************************************************
  106. ;*** get side info
  107. ;*****************************************************************************
  108.     clr    a    #<9,n7
  109.     jsr    (r5)            ;getbits(9) - main_data_begin
  110.  
  111.     move    x:mono,a
  112.     move    #>5,x0
  113.     tst    a    #>3,a
  114.     tne    x0,a
  115.     clr    a    a,n7
  116.     jsr    (r5)            ;getbits(mono?5:3) - private_bits
  117.  
  118. ;****** read scalefactor selection info
  119.     move    x:mono,a
  120.     move    #>4,x0
  121.     tst    a    #>8,a
  122.     tne    x0,a            ;loops=mono?4:8
  123.     move    #>granule1_sfsi,r0
  124.     do    a,read_sfsi
  125.     jsr    (r6)            ;getbit1
  126.     move    a,x:(r0)+
  127. read_sfsi
  128.  
  129. ;****** read granule side info
  130.     move    #>si_tab,r3        ;first granule
  131.     move    x:channels,n3
  132.     move    #<0,y1            ;y1=bitpos
  133.     move    #<0,x1            ;x1=granule_counter
  134.  
  135. read_grsi_loop_head
  136.     do    n3,read_grsi_loop    ;channels
  137.     move    x:(r3)+,r0        ;r0=pointer to si_struct
  138.  
  139.     clr    a    #<12,n7
  140.     jsr    (r5)            ;getbits(12)
  141.     add    y1,a    y1,x:(r0)+    ;si.grstart=bitpos
  142.     move        a,x:(r0)+    a,y1    ;si.grend=bitpos_new
  143.     clr    a    #<9,n7
  144.     jsr    (r5)            ;getbits(9)
  145.     lsl    a    #<8,n7        ;*2
  146.     clr    a    a,x:(r0)+    a,y0    ;si.regionend2  !!  y0
  147.     jsr    (r5)            ;getbits(8)
  148.     move        a,x:(r0)+    ;si.globalgain
  149.     clr    a    #<4,n7
  150.     jsr    (r5)            ;getbits(4)
  151.     clr    a    a,x:(r0)+    ;si.sfcompress
  152.     jsr    (r6)            ;getbit1
  153.     jeq    read_grsi_block0
  154.  
  155.     clr    a    #<2,n7
  156.     jsr    (r5)            ;getbits(2)
  157.     clr    a    a,x:(r0)+    ;si.blocktype
  158.     jsr    (r6)            ;getbit1
  159.     move        a,x:(r0)+    ;si.mixedblock
  160.     clr    a    #<5,n7
  161.     jsr    (r5)            ;getbits(5)
  162.     clr    a    a,x:(r0)+    ;si.tabsel0
  163.     jsr    (r5)            ;getbits(5)
  164.     clr    a    a,x:(r0)+    ;si.tabsel1
  165.     move        a,x:(r0)+    ;si.tabsel2=0
  166.     do    #3,read_grsi_sbg_loop
  167.     clr    a    #<3,n7
  168.     jsr    (r5)            ;getbits(3)
  169.     rep    #3
  170.     lsl    a
  171.     move        a,x:(r0)+    ;si.subblockgain012 * 8 !!!!
  172. read_grsi_sbg_loop
  173.     move    #<36,a1
  174.     move    a1,x:(r0)        ;si.regionend0
  175.     move    #>576,x0        ;x0=si.regionend1
  176.     jmp    read_grsi_block0e
  177.  
  178. read_grsi_block0
  179.     move        a,x:(r0)+    ;si.blocktype =0
  180.     move        a,x:(r0)+    ;si.mixedblock=0
  181.     move    #<5,n7
  182.     do    #3,read_grsi_tabsel_loop
  183.     jsr    (r5)            ;getbits(5)
  184.     clr    a    a,x:(r0)+    ;si.tabsel012
  185. read_grsi_tabsel_loop
  186.     rep    #3
  187.     move        a,x:(r0)+    ;si.subblockgain012
  188.     move    #<4,n7
  189.     jsr    (r5)            ;getbits(4)
  190.     move    #>1,x0
  191.     add    x0,a    x:sfbandl_p,r2    ;+1
  192.     clr    a    a,n2
  193.     move    #<3,n7
  194.     jsr    (r5)            ;getbits(3)
  195.     add    x0,a    n2,x0        ;+1
  196.     add    x0,a    x:(r2+n2),x0    ;+region0count
  197.     move    a,n2
  198.     move    x0,x:(r0)        ;si.regionend0
  199.     move    x:(r2+n2),x0        ;x0=si.regionend1
  200.  
  201. read_grsi_block0e
  202.     move    x:(r0),a
  203.     cmp    y0,a            ;? si.regionend0 > si.regionend2 ?
  204.     tpl    y0,a
  205.     tfr    x0,a    a,x:(r0)+    ;si.regionend0
  206.     cmp    y0,a    #>33,x0        ;? si.regionend1 > si.regionend2 ?
  207.     tpl    y0,a
  208.     clr    a    a,x:(r0)+    ;si.regionend1
  209.     jsr    (r6)            ;getbit1
  210.     clr    a    a,x:(r0)+    ;si.preflag
  211.     jsr    (r6)            ;getbit1
  212.     move    #>1,y0
  213.     add    y0,a    #>32,y0
  214.     clr    a    a,x:(r0)+    ;si.sfshift + 1 !!!!
  215.     jsr    (r6)            ;getbit1
  216.     tne    x0,a            ;33
  217.     teq    y0,a            ;32
  218.     move        a,x:(r0)+    ;si.tabsel3
  219.  
  220. read_grsi_loop
  221.     tfr    x1,a    #<1,x1        ;granule_counter
  222.     tst    a    #>si_tab+2,r3
  223.     jeq    read_grsi_loop_head    ;second granule
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231. ;*****************************************************************************
  232. ;****** for(gr=0;gr<ngr;gr++)        ;decode 2 granules
  233.     move    #>si_tab,r0
  234.     move    #>granule0_sfsi,n0
  235.     clr    a    x:outbuf,r1
  236.  
  237. decode_granule_loop
  238.     move    r0,x:si_granule_tab_p
  239.     move    n0,x:sfsi_p
  240.     move    r1,x:outbuf
  241.     move    a,x:granule_counter
  242.  
  243. ;*****************************************************************************
  244. ;****** for(ch=0;ch<stereo;ch++)    ;read+scale 1 or 2 channels
  245.     move    #>scalefac0,r3
  246.     move    x:channels,a
  247.     move    #>xr0,r1
  248.  
  249. scale_channel_loop
  250.     move    r0,x:si_tab_p
  251.     move    r1,x:xr_p
  252.     move    a,x:channel_counter
  253.  
  254.     clr    a    r3,x:scalefac_p
  255.     rep    #576
  256.     move    a,x:(r1)+        ;clear xr
  257.  
  258. ;****** move bitstream pointer to si.grstart
  259.     move    x:si_tab_p,r1
  260.     move    #>inbuf+11,r7        ;skip sideinfo
  261.     move    x:(r1),r1        ;r1=si_struct            !! r1
  262.     move    #>24,x0
  263.     move    x:(r1),a        ;si.grstart
  264. move_to_grstart
  265.     sub    x0,a    (r7)+
  266.     jgt    move_to_grstart
  267.     add    x0,a    (r7)-
  268.     jsr    getbits_init        ;skip bits (24bit words)
  269.     tst    a    a,n7
  270.     jsne    (r5)            ;getbits
  271.     move    #<sfcompress-si0,n1
  272.     move    x:(r1),b0        ;si.grstart - correct bit counter!
  273.  
  274.  
  275. ;*****************************************************************************
  276. ;*** read scalefactors
  277. ;*****************************************************************************
  278.     move    x:(r1+n1),n2        ;si.sfcompress
  279.     move    #>slentab0,r2
  280.     move    #>newslen,r0
  281.     move    x:(r2+n2),a
  282.     move    a,x:(r0)+        ;newslen0=slentab0[si.sfcompress]
  283.     move    #>slentab1,r2
  284.     move    a,x:(r0)+        ;newslen1=slentab0[si.sfcompress]
  285.     move    x:(r2+n2),a
  286.     move    a,x:(r0)+        ;newslen2=slentab1[si.sfcompress]
  287.     move    #<blocktype-si0,n1
  288.     move    a,x:(r0)+        ;newslen3=slentab1[si.sfcompress]
  289. ;****** select sfbtab
  290.     move    x:(r1+n1),a        ;si.blocktype
  291.     move    #>2,x0
  292.     cmp    x0,a    #>sfbtab0,a    ;sfb=sfbtab0  (blocktype!=2)
  293.     jne    read_sf_ne2
  294.     move    #<mixedblock-si0,n1
  295.     move    #>sfbtab1,x0
  296.     move    x:(r1+n1),a        ;si.mixedblock
  297.     tst    a    #>sfbtab2,a    ;sfb=sfbtab2  (mixedblock)
  298.     teq    x0,a            ;sfb=sfbtab1  (!mixedblock)
  299. read_sf_ne2
  300.     move    a,r2            ;r2=sfb
  301.     move    x:sfsi_p,r1        ;r1=sfsi
  302.     move    #>newslen,r0        ;r0=newslen  ;r3=sfp (scalefac0/1)
  303.  
  304. ;****** read scalefactors
  305.     do    #4,read_sf_loop0
  306.     move    x:(r2)+,x0        ;sfb[i]
  307.     move    x:(r2),a        ;sfb[i+1]
  308.     sub    x0,a
  309.     move    x:(r1)+,a    a,y0    ;sfsi[i]
  310.     tst    a        y0,n3    ;sfb[i+1]-sfb[i]
  311.     move    x:(r0)+,a        ;newslen[i]
  312.     jne    read_sf_skip        ;if(!sfsi[i])
  313.  
  314.     do    n3,read_sf_loop1    ;for(k=sfb[i];k<sfb[i+1];k++)
  315.     clr    a        a,x0
  316.     cmp    x0,a        x0,n7
  317.     jsne    (r5)            ;getbits
  318.     move    a,x:(r3)+    x0,a    ;*sfp++=getbits(newslen[i])
  319. read_sf_loop1
  320.     move    (r3)-n3
  321.  
  322. read_sf_skip
  323.     move    (r3)+n3            ;else sfp+=sfb[i+1]-sfb[i]
  324. read_sf_loop0
  325.  
  326.     clr    a    r1,x:sfsi_p
  327.     rep    #3
  328.     move    a,x:(r3)+        ;what's this?!?  (taken from amp11)
  329.  
  330.  
  331.  
  332. ;*****************************************************************************
  333. ;*** read huffman
  334. ;*****************************************************************************
  335.     move    x:si_tab_p,r1
  336.     move    #<blocktype-si0,n1
  337.     move    x:(r1),r1        ;r1=si_struct            !! r1
  338. ;****** select reorder table
  339.     move    #>2,x0
  340.     move    x:(r1+n1),a        ;si.blocktype
  341.     cmp    x0,a    x:ro0_p,a    ;ro=ro0  (blocktype!=2)
  342.     jne    huff_ne2
  343.     move    #<mixedblock-si0,n1
  344.     move    x:ro1_p,x0
  345.     move    x:(r1+n1),a        ;si.mixedblock
  346.     tst    a    x:ro2_p,a    ;ro=ro2  (mixedblock)
  347.     teq    x0,a            ;ro=ro1  (!mixedblock)
  348. huff_ne2
  349.  
  350. ;****** read region0
  351.     move    #<regionend0-si0,n1
  352.     move    a,r2            ;r2=ro (reorder table)
  353.     move    x:xr_p,r3        ;r3=xr (output)
  354.     move    #>pow43tab,r4        ;r4=pow43tab
  355.     move    x:(r1+n1),a        ;si.regionend0
  356.     asr    a    #<tabsel0-si0,n1
  357.     move    a,n3            ;n3=loop_count
  358.     tst    a    x:(r1+n1),n0    ;si.tabsel0
  359.     jsgt    huff_region012
  360. ;****** read region1
  361.     move    #<regionend0-si0,n1
  362.     nop
  363.     move    x:(r1+n1),x0        ;si.regionend0
  364.     move    #<regionend1-si0,n1
  365.     nop
  366.     move    x:(r1+n1),a        ;si.regionend1
  367.     sub    x0,a
  368.     asr    a    #<tabsel1-si0,n1
  369.     move    a,n3            ;n3=loop_count
  370.     tst    a    x:(r1+n1),n0    ;si.tabsel1
  371.     jsgt    huff_region012
  372. ;****** read region2
  373.     move    #<regionend1-si0,n1
  374.     nop
  375.     move    x:(r1+n1),x0        ;si.regionend1
  376.     move    #<regionend2-si0,n1
  377.     nop
  378.     move    x:(r1+n1),a        ;si.regionend2
  379.     sub    x0,a
  380.     asr    a    #<tabsel2-si0,n1
  381.     move    a,n3            ;n3=loop_count
  382.     tst    a    x:(r1+n1),n0    ;si.tabsel2
  383.     jsgt    huff_region012
  384.  
  385.     jmp    huff_region012_end
  386.  
  387. ;--vv-------------------------------vv--
  388. huff_region012
  389.     move    #>htablinbits,r0
  390.     move    #>15,x1            ;x1=#15                !! x1
  391.     move    x:(r0+n0),n2        ;n2=linbits
  392.     move    #>htabs,r0
  393.     move    r1,n1            ;save r1
  394.     move    #>huff_dec012,r1    ;r1=huff_dec012
  395.     move    #>huff_dec012_end,r6    ;r6=huff_dec012_end
  396.     move    #<3,n6            ;n6=#3
  397.     move    x:(r0+n0),n5        ;n5=htab
  398.     move    n5,r0            ;tab
  399.  
  400.     do    n3,huff_loop012
  401. huff_dec012
  402.     move    x:(r0)+,x0        ;v=*tab++
  403.     mpy    x0,#3,a            ;if(v>=0)
  404.     jge    (r6)-n6    ;huff_dec012_end    ;return v
  405. ;    ---getbit1 inline
  406.     inc    b
  407.     lsl    b    x0,n0
  408.     jne    (r6)+n6    ;huff_dec012_gb_ne
  409.     move    x:(r7)+,b1
  410.     rol    b
  411. huff_dec012_gb_ne
  412. ;    ---^
  413.     jcc    (r1)    ;huff_dec012    ;if(getbit1)
  414.     move    (r0)-n0            ;tab-=v
  415.     jmp    (r1)    ;huff_dec012
  416. huff_dec012_end
  417.  
  418.     move    (r6)+n6
  419.     lsr    a    x:(r2)+,n3    ;x=val>>4
  420.     jeq    huff_r012_zero_0
  421.     move    #<0,a0
  422.     cmp    x1,a            ;if(x==15)
  423.     jne    huff_r012_ne15_0
  424.     clr    a    n2,y0
  425.     cmp    y0,a    n2,n7
  426.     jsne    (r5)            ;getbits(linbits)
  427.     add    x1,a            ;+15
  428. huff_r012_ne15_0
  429.     move    a,n4
  430. ;    ---getbit1 inline
  431.     inc    b
  432.     lsl    b    y:(r4+n4),a    ;v=pow43tab[x]
  433.     jne    huff_r012_gb_ne_0
  434.     move    x:(r7)+,b1
  435.     rol    b
  436. huff_r012_gb_ne_0
  437. ;    ---^
  438.     neg    a    a,y0        ;(keep CARRY bit!)
  439.     tcc    y0,a            ;if(getbit1) v=-v
  440. huff_r012_zero_0
  441.     tfr    x0,a    a,x:(r3+n3)    ;xr[ro[i+0]]=v
  442.  
  443.     and    x1,a    x:(r2)+,n3    ;x=val&15 
  444.     jeq    huff_r012_zero_1
  445.     cmp    x1,a            ;if(x==15)
  446.     jne    huff_r012_ne15_1
  447.     clr    a    n2,y0
  448.     cmp    y0,a    n2,n7
  449.     jsne    (r5)            ;getbits(linbits)
  450.     add    x1,a            ;+15
  451. huff_r012_ne15_1
  452.     move    a,n4
  453. ;    ---getbit1 inline
  454.     inc    b
  455.     lsl    b    y:(r4+n4),a    ;v=pow43tab[x]
  456.     jne    huff_r012_gb_ne_1
  457.     move    x:(r7)+,b1
  458.     rol    b
  459. huff_r012_gb_ne_1
  460. ;    ---^
  461.     neg    a    a,y0        ;(keep CARRY bit!)
  462.     tcc    y0,a            ;if(getbit1) v=-v
  463. huff_r012_zero_1
  464.     move    n5,r0            ;tab
  465.     move    a,x:(r3+n3)        ;xr[ro[i+1]]=v
  466. huff_loop012
  467.     move    n1,r1            ;restore r1
  468.     rts
  469. ;--^^-------------------------------^^--
  470. huff_region012_end
  471.  
  472.  
  473. ;****** read region3
  474.     move    #<regionend2-si0,n1
  475.     move    #>576,a
  476.     move    x:(r1+n1),x0        ;si.regionend2
  477.     move    #<grend-si0,n1
  478.     sub    x0,a    #>huff_dec3_gb_ne,r6
  479.     asr    a    x:(r1+n1),x1    ;si.grend            !! x1
  480.     asr    a    #<tabsel3-si0,n1
  481.     move    #>htabs,r0
  482.     move    x:(r1+n1),n0        ;si.tabsel3
  483.     jle    huff_region3_end    ;--> skip ( because regionend2>=576 )
  484.     move    x:(r0+n0),n1        ;n1=htab
  485.     move    a,x0    y:pow43tab+1,a
  486.     neg    a    a,n2        ;n2= pow43tab[1]        !! n2
  487.     tfr    x0,a    a,y0        ;y0=-pow43tab[1]        !! y0
  488.     move    #>huff_dec3,r1
  489.  
  490.  
  491.     do    a,huff_loop3
  492.     move    b0,a            ;bit counter
  493.     cmp    x1,a    n1,r0        ;tab
  494.     jmi    huff_dec3        ;while(huffbit<si.grend)
  495.     enddo
  496.     jmp    huff_loop3
  497. huff_dec3
  498.     move    x:(r0)+,x0        ;v=*tab++
  499.     jclr    #23,x0,huff_dec3_end    ;if(v>=0) return v
  500. ;    ---getbit1 inline
  501.     inc    b
  502.     lsl    b    x0,n0
  503.     jne    (r6)    ;huff_dec3_gb_ne
  504.     move    x:(r7)+,b1
  505.     rol    b
  506. huff_dec3_gb_ne
  507. ;    ---^
  508.     jcc    (r1)    ;huff_dec3    ;if(getbit1)
  509.     move    (r0)-n0            ;tab-=v
  510.     jmp    (r1)    ;huff_dec3
  511. huff_dec3_end
  512.  
  513.     clr    a    x:(r2)+,n3    ;ro[i+0]
  514.     jclr    #3,x0,huff_r3_zero_3    ;if(x=(val>>3)&1)
  515. ;    ---getbit1 inline
  516.     inc    b
  517.     lsl    b    n2,a        ;x
  518.     jne    huff_r3_gb_ne_3
  519.     move    x:(r7)+,b1
  520.     rol    b
  521. huff_r3_gb_ne_3
  522. ;    ---^                ;if(getbit1)
  523.     tcs    y0,a            ;x=-x
  524. huff_r3_zero_3
  525.     move    a,x:(r3+n3)        ;xr[ro[i+0]]=x
  526.  
  527.     clr    a    x:(r2)+,n3    ;ro[i+1]
  528.     jclr    #2,x0,huff_r3_zero_2    ;if(x=(val>>2)&1)
  529. ;    ---getbit1 inline
  530.     inc    b
  531.     lsl    b    n2,a        ;x
  532.     jne    huff_r3_gb_ne_2
  533.     move    x:(r7)+,b1
  534.     rol    b
  535. huff_r3_gb_ne_2
  536. ;    ---^                ;if(getbit1)
  537.     tcs    y0,a            ;x=-x
  538. huff_r3_zero_2
  539.     move    a,x:(r3+n3)        ;xr[ro[i+1]]=x
  540.  
  541.     clr    a    x:(r2)+,n3    ;ro[i+2]
  542.     jclr    #1,x0,huff_r3_zero_1    ;if(x=(val>>1)&1)
  543. ;    ---getbit1 inline
  544.     inc    b
  545.     lsl    b    n2,a        ;x
  546.     jne    huff_r3_gb_ne_1
  547.     move    x:(r7)+,b1
  548.     rol    b
  549. huff_r3_gb_ne_1
  550. ;    ---^                ;if(getbit1)
  551.     tcs    y0,a            ;x=-x
  552. huff_r3_zero_1
  553.     move    a,x:(r3+n3)        ;xr[ro[i+2]]=x
  554.  
  555.     clr    a    x:(r2)+,n3    ;ro[i+3]
  556.     jclr    #0,x0,huff_r3_zero_0    ;if(x=val&1)
  557. ;    ---getbit1 inline
  558.     inc    b
  559.     lsl    b    n2,a        ;x
  560.     jne    huff_r3_gb_ne_0
  561.     move    x:(r7)+,b1
  562.     rol    b
  563. huff_r3_gb_ne_0
  564. ;    ---^                ;if(getbit1)
  565.     tcs    y0,a            ;x=-x
  566. huff_r3_zero_0
  567.     move    a,x:(r3+n3)        ;xr[ro[i+3]]=x
  568. huff_loop3
  569.  
  570. huff_region3_end
  571.  
  572.  
  573. ;;;    jsr    getbits_pause        ;(not really required)
  574.  
  575.  
  576.  
  577. ; from now on we can use all registers again
  578. ; because 'getbits' is no longer active (r5, r6, r7, b)
  579.  
  580.  
  581.  
  582. ;*****************************************************************************
  583. ;*** scale samples
  584. ;*****************************************************************************
  585.     move    x:si_tab_p,r1
  586.     move    #<blocktype-si0,n1
  587.     move    x:(r1),r1        ;r1=si_struct            !! r1
  588. ;****** number of LONG and SHORT bands
  589.     move    #>2,x0
  590.     move    x:(r1+n1),a        ;si.blocktype
  591.     move    #>13,b            ;s_min=13 (blocktype!=2)
  592.     cmp    x0,a    #>22,a        ;l_max=22 (blocktype!=2)
  593.     jne    scale_ne2
  594.     move    #<mixedblock-si0,n1
  595.     move    #<0,x0
  596.     move    x:(r1+n1),a        ;si.mixedblock
  597.     move    #>3,b            ;s_min=3  (mixedblock)
  598.     tst    a    #>8,a        ;l_max=8  (mixedblock)
  599.     teq    x0,b            ;s_min=0  (!mixedblock)
  600.     teq    x0,a            ;l_max=0  (!mixedblock)
  601. scale_ne2
  602.     move    #<globalgain-si0,n1
  603.     move    b,n5            ;n5=s_min
  604.     move    x:(r1+n1),n6        ;n6=si.globalgain
  605.     move    x:scalefac_p,r2        ;r2=sfp
  606.     move    #<sfshift-si0,n1
  607.     move    x:quantab_p,n4        ;n4=quantab
  608.     move    x:(r1+n1),n2        ;n2=si.sfshift (+1 = 1 or 2)
  609.     move    #<subblockgain0-si0,n1
  610.     move    #>pretab,r4        ;r4=pretab
  611.     lua    (r1)+n1,r7        ;r7=&si.subblockgain0
  612.  
  613.  
  614. ;****** scale LONG bands
  615.     tst    a    a,x1
  616.     jeq    scale_l_loop0        ;-->skip ( because l_max==0 )
  617.     move    #<preflag-si0,n1
  618.     move    x:xr_p,r0        ;r0=xr
  619.     move    x:(r1+n1),n0        ;n0=si.preflag
  620.     move    x:sfbandl_p,r5        ;r5=bil
  621.     move    n0,a            ;preflag
  622.  
  623.     do    x1,scale_l_loop0    ;for (j=0; j<l_max; j++)
  624.     tst    a    x:(r4)+,x1    ;pretab[j]
  625.     tne    x1,a            ;a=(preflag ? pretab[j] : 0)
  626.     move        x:(r2)+,x1    ;*sfp++
  627.     add    x1,a    n6,x0        ;a+=sf  ;gg
  628.     rep    n2
  629.     lsl    a            ;a<<=sfshift (1 or 2)
  630.     neg    a    #<0,y0        ;a=-a    ;y0=0 (for DP Multiply mode!!)
  631.     add    x0,a    n4,r3        ;a+=gg  ;quantab
  632.     tmi    y0,a
  633.     lsl    a    x:(r5)+,x1    ;a<<=1  ;bil[j]
  634.     move    a,n3
  635.     move        x:(r5),b    ;bil[j+1]
  636.     sub    x1,b    (r3)+n3        ;quantab[gg-(sf+pre)<<shift]
  637.     move        y:(r3)+,x1    ;MSP
  638.     clr    a    y:(r3),x0    ;LSP    ;a=0 (for DP Multiply mode!!)
  639.  
  640. ;this is the "fastest" version of the Double Precision Multiply scaling loop
  641. ;(no checks for overflow; no "move #0,a" between two calculations)
  642. ;(assumption: the results are ALWAYS in the __lowest_18bit_of_a0__ only)
  643.     ori    #$40,mr        ;enter Double Precision Multiply mode
  644.     move        x:(r0),y1
  645.     do    b,scale_l_loop1        ;for (i=bil[j]; i<bil[j+1]; i++)
  646.     mac    x0,y1,a    (r0)+        ;LSP*SP
  647.     mac    y1,x1,a    x:(r0)-,y1    ;shifted(a)+SP*MSP
  648.     move        a0,x:(r0)+
  649. scale_l_loop1
  650.     andi    #$bf,mr        ;exit Double Precision Multiply mode
  651.  
  652.     move    n0,a            ;preflag
  653. scale_l_loop0
  654.  
  655.  
  656. ;****** scale SHORT bands
  657.     move    n5,x1            ;s_min
  658.     move    #>13,a
  659.     sub    x1,a    x:sfbands_p,r5
  660.     jle    scale_s_loop0        ;--> skip ( because s_min>=13 )
  661.  
  662.     move    (r5)+n5            ;r5=&bis[s_min]
  663.     move    #<3,n0            ;n0=3
  664.     move    n4,n5            ;n5=quantab
  665.     move    x:xr_p,r4
  666.  
  667.     do    a,scale_s_loop0        ;for (j=s_min; j<13; j++)
  668.     move        x:(r5)+,n4    ;bis[j]
  669.     move        x:(r5),a    ;bis[j+1]
  670.     move    n4,x1
  671.     move        (r4)+n4        ;r4=&xr[bis[j]]
  672.     sub    x1,a    n0,x0
  673.     move    a,x1
  674.     jsr    <delf_div        ;(bis[j+1]-bis[j])/3
  675.     rnd    a    r7,r6        ;r6=&si.subblockgain0
  676.     move    a,n4            ;n4=(inner loop count)
  677.  
  678.     do    #3,scale_s_loop1    ;for (k=0; k<3; k++)
  679.     move        x:(r2)+,a    ;a=*sfp++
  680.     rep    n2
  681.     lsl    a    x:(r6),x1    ;a<<=sfshift (1 or 2)
  682.     ;                ;x1=si.subblockgain[k]  (* 8 !!!!)
  683.     add    x1,a    n6,x0        ;a+=sbg ;gg
  684.     neg    a    #<0,y0        ;a=-a    ;y0=0 (for DP Multiply mode!!)
  685.     add    x0,a    (r6)+        ;a+=gg
  686.     tmi    y0,a
  687.     lsl    a    n5,r3        ;a<<=1    ;quantab
  688.     move    a,n3
  689.     move    r4,r0            ;r0=&xr[bis[j]+k]
  690.     move        (r3)+n3        ;quantab[gg-sf<<shift-sbg]
  691.     move        y:(r3)+,x1    ;MSP
  692.     clr    a    y:(r3),x0    ;LSP    ;a=0 (for DP Multiply mode!!)
  693.  
  694. ;this is the "fastest" version of the Double Precision Multiply scaling loop
  695. ;(no checks for overflow; no "move #0,a" between two calculations)
  696. ;(assumption: the results are ALWAYS in the __lowest_18bit_of_a0__ only)
  697.     ori    #$40,mr            ;enter Double Precision Multiply mode
  698.     move        x:(r0),y1
  699.     do    n4,scale_s_loop2    ;for (i=bis[j]; i<bis[j+1]; i+=3)
  700.     mac    x0,y1,a    (r0)+n0        ;LSP*SP
  701.     mac    y1,x1,a    x:(r0)-n0,y1    ;shifted(a)+SP*MSP
  702.     move        a0,x:(r0)+n0
  703. scale_s_loop2
  704.     andi    #$bf,mr            ;exit Double Precision Multiply mode
  705.  
  706.     move    (r4)+            ;r4=&xr[bis[j]+k]
  707. scale_s_loop1
  708.  
  709.     move    x:xr_p,r4
  710. scale_s_loop0
  711.  
  712.  
  713.     move    x:si_tab_p,r0
  714.     move    #>scalefac1,r3
  715.     move    #>xr1,r1
  716.     move    x:channel_counter,a
  717.     lsr    a    (r0)+
  718.     jne    scale_channel_loop    ;next channel
  719.  
  720. ;****** for(ch=0;ch<stereo;ch++)    ;end************************
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728. ;*****************************************************************************
  729. ;*** joint-stereo processing
  730. ;*****************************************************************************
  731.     move    x:modext,a
  732.     tst    a    #>2,x0
  733.     jeq    js_end                ;modext==0 -> no joint-stereo
  734.     cmp    x0,a    #>xr0,r0
  735.     jne    js_modext_1_3
  736.  
  737. ;****** modext==2 - mid/side stereo for all samples
  738.     move    #>xr1,r1
  739.     move    r1,r2
  740.     move    #0.70710678,y0            ;sqrt(0.5)
  741.     move            x:(r0),x0
  742.     mpy    x0,y0,a        x:(r1)+,x1
  743.     macr    x1,y0,a
  744.     mpy    x0,y0,b        a,x:(r0)+
  745.     macr    -x1,y0,b    x:(r0),x0
  746.     do    #576-1,js_ms_loop
  747.     mpy    x0,y0,a        x:(r1)+,x1
  748.     macr    x1,y0,a        b,x:(r2)+
  749.     mpy    x0,y0,b        a,x:(r0)+
  750.     macr    -x1,y0,b    x:(r0),x0
  751. js_ms_loop
  752.     move            b,x:(r2)+
  753.     jmp    js_end
  754.  
  755.  
  756. ;****** modext==1 or 3 - intensity stereo
  757. js_modext_1_3
  758. ;
  759. ; note: intensity stereo decoding is not finished yet
  760. ;       due to lack of motivation...
  761. ;       but who cares about that, anyway?!?
  762. ;
  763.     move    a,n7            ;n7=modext            !! n7
  764.  
  765.  
  766. ;******    SHORT bands
  767.  
  768. ;to be done...
  769.  
  770.  
  771. ;******    LONG bands
  772.  
  773. ;to be verified, there's something wrong in here...
  774.  
  775. ;    move    #<22,n5        ;!!!! number of long bands !!!!
  776. ;
  777. ;    move    #>scalefac1,r2    ;!!!!
  778. ;    move    #>ktab,r6    ;!!!!
  779. ;
  780. ;    move    #>scalefac1+20,r0
  781. ;    move    x:sfbandl_p,r5
  782. ;    move    x:(r0)+,x0        ;copy sf(20) to sf(21)
  783. ;    move    x0,x:(r0)
  784. ;
  785. ;    move    #>xr0,r0
  786. ;    move    #>xr1,r1
  787. ;
  788. ;;    *** find highest non-zero sample
  789. ;    move    x:(r5+n5),n1        ;bil[sfbhigh]
  790. ;    move    #>1,x1
  791. ;    lua    (r1)+n1,r3
  792. ;    move    #>js_is_loop_l_0,r4
  793. ;    move    (r3)-
  794. ;    move    n1,a
  795. ;js_is_loop_l_0
  796. ;    sub    x1,a    x:(r3)-,b
  797. ;    tst    b    a,n4        ;n4=isbound
  798. ;    jeq    (r4)            ;js_is_loop_l_0
  799. ;;;;;    move    #576,n4
  800. ;
  801. ;;    *** process all LONG bands
  802. ;    do    n5,js_is_loop_l_1
  803. ;    move    x:(r5)+,x0        ;bil[i]
  804. ;    move    x:(r5),b        ;bil[i+1]
  805. ;    sub    x0,b    #>7,x1
  806. ;    move    b,n0            ;n0=bil[i+1]-bil[i]
  807. ;    move    x:(r2)+,a        ;a=ispos[i]
  808. ;    cmp    x1,a    b,n1
  809. ;    jeq    js_is_nois_l        ;!! ispos==7
  810. ;    tfr    x0,b    n4,y0        ;isbound
  811. ;    cmp    y0,b    a,n6        ;ispos
  812. ;    jle    js_is_nois_l        ;!! below isbound
  813. ;
  814. ;;    *** intensity-stereo
  815. ;    ori    #$08,mr            ;SCALE UP mode
  816. ;    move    l:(r6+n6),y        ;y1=ktab[ispos][0]  y0=ktab[ispos][1]
  817. ;    move            x:(r0),x0
  818. ;    do    n0,js_is_loop_l_2
  819. ;    mpy    x0,y1,a
  820. ;    asl    a
  821. ;    mpy    x0,y0,a        a,x:(r0)+
  822. ;    asl    a        x:(r0),x0
  823. ;    move            a,x:(r1)+    ;sub-optimal...
  824. ;js_is_loop_l_2
  825. ;    andi    #$f3,mr            ;NO SCALING mode
  826. ;    jmp    js_is_loop_ms_l        ;rewind xr pointers
  827. ;
  828. ;;    *** mid/side-stereo
  829. ;js_is_nois_l
  830. ;    btst    #1,n7
  831. ;    jeq    js_is_noms_l
  832. ;    move    #0.70710678,y0            ;sqrt(0.5)
  833. ;    move            x:(r0),x0
  834. ;    do    n0,js_is_loop_ms_l
  835. ;    mpy    x0,y0,a        x:(r1),x1
  836. ;    macr    x1,y0,a
  837. ;    mpy    x0,y0,b        a,x:(r0)+
  838. ;    macr    -x1,y0,b    x:(r0),x0
  839. ;    move            b,x:(r1)+    ;sub-optimal...
  840. ;js_is_loop_ms_l
  841. ;    move    (r0)-n0            ;rewind xr pointers
  842. ;    move    (r1)-n1
  843. ;js_is_noms_l
  844. ;    move    (r0)+n0            ;forward xr pointers
  845. ;    move    (r1)+n1
  846. ;js_is_loop_l_1
  847.  
  848.  
  849.  
  850. js_end
  851.  
  852.  
  853.  
  854.  
  855.  
  856. ;*****************************************************************************
  857. ;****** for(ch=0;ch<stereo;ch++)    ;filter+synthesize 1 or 2 channels
  858.     move    x:si_granule_tab_p,r0
  859.     move    #>xr0,r1
  860.     move    #>hybrid_prev0,r2
  861.     move    #>synth_audio_l_p,r3
  862.     move    x:channels,a
  863.  
  864. hybrid_synth_channel_loop
  865.     move    r0,x:si_tab_p
  866.     move    r1,x:xr_p
  867.     move    r2,x:prev_p
  868.     move    r3,x:synth_audio_pp
  869.     move    a,x:channel_counter
  870.  
  871.  
  872. ;*****************************************************************************
  873. ;*** hybrid filter
  874. ;*****************************************************************************
  875.     move    x:si_tab_p,r1
  876.     move    #<blocktype-si0,n1
  877.     move    x:(r1),r1        ;r1=si_struct
  878. ;****** select LONG / SHORT limit
  879.     move    #>2,b
  880.     move    x:(r1+n1),x0        ;x0=si.blocktype
  881.     cmp    x0,b    #>32,a        ; a=lim=32 (blocktype!=2)
  882.     jne    hybrid_block_ne2
  883.     move    #<mixedblock-si0,n1
  884.     move    #<0,x0            ;x0=0 (blocktype in mixedblock)
  885.     move    x:(r1+n1),a        ;si.mixedblock
  886.     tst    a    b,a        ; a=lim=2  (mixedblock)
  887.     teq    x0,a            ; a=lim=0  (!mixedblock)
  888. hybrid_block_ne2
  889.  
  890. ;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  891. ;    cmp    b,a    x:debug_mb_count,r0
  892. ;    jne    debug_mb_count__ne    ;if((blocktype==2) && mixedblock)
  893. ;    move    (r0)+
  894. ;debug_mb_count__ne
  895. ;    move    r0,x:debug_mb_count
  896. ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  897.  
  898.     move    a,n1            ;n1=lim              !! IMDCT !!
  899.     clr    b    #<36,n0
  900.     cmp    x0,b    #>imdct_windows,r0
  901.     jle    hybrid_win0
  902.     rep    x0
  903.     move    (r0)+n0            ;r0=&win[blocktype]  !! IMDCT !!
  904. hybrid_win0
  905.  
  906.  
  907. ;****** antialias butterflies
  908.     move    #>1,x0
  909.     sub    x0,a    x:xr_p,r4
  910.     jle    antialias_loop        ;--> skip  ( because lim<=1 )
  911.  
  912.     move    #<18,n4
  913.     move    x:cs_ca_tab_p,r3
  914.     movec    #<16-1,m3        ;modulo-16 addressing
  915.     move    (r4)+n4            ;upper band
  916.     move    r4,r2            ;upper band
  917.     lua    (r4)-,r5        ;lower band
  918.     move    #<18-8+1,n2
  919.     move    #<18-8+1,n4
  920.     move    #<18+8,n5
  921.     move            x:(r5),x0    y:(r3)+,y0
  922.     move    (r5)-n5
  923.  
  924.     do    a,antialias_loop
  925.     mpy    x0,y0,a        x:(r4)+,x1    y:(r3)+,y1
  926.     macr    -x1,y1,a    (r5)+n5                ;update r5
  927.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  928.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  929.     mpy    x0,y0,a        x:(r4)+,x1
  930.     macr    -x1,y1,a    b,x:(r2)+
  931.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  932.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  933.     mpy    x0,y0,a        x:(r4)+,x1
  934.     macr    -x1,y1,a    b,x:(r2)+
  935.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  936.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  937.     mpy    x0,y0,a        x:(r4)+,x1
  938.     macr    -x1,y1,a    b,x:(r2)+
  939.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  940.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  941.     mpy    x0,y0,a        x:(r4)+,x1
  942.     macr    -x1,y1,a    b,x:(r2)+
  943.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  944.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  945.     mpy    x0,y0,a        x:(r4)+,x1
  946.     macr    -x1,y1,a    b,x:(r2)+
  947.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  948.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  949.     mpy    x0,y0,a        x:(r4)+,x1
  950.     macr    -x1,y1,a    b,x:(r2)+
  951.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  952.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  953.     mpy    x0,y0,a        x:(r4)+n4,x1            ;update r4
  954.     macr    -x1,y1,a    b,x:(r2)+
  955.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0    ;!y0
  956.     macr    x0,y1,b        x:(r5+n5),x0            ;!x0
  957.     move            b,x:(r2)+n2            ;update r2
  958. antialias_loop
  959.  
  960.     movec    m7,m3            ;linear addressing
  961.  
  962.  
  963.  
  964.     move    x:xr_p,r7        ;r7=xr                !! r7
  965.     move    x:prev_p,n6        ;n6=prev            !! n6
  966.     move    #<0,n2            ;n2=sb&1 (even or odd subband)    !! n2
  967.  
  968. ;****** IMDCT for LONG bands
  969.     move    n1,a            ;lim
  970.     tst    a    r0,n7        ;n7=&win[blocktype]        !! n7
  971.     jle    imdct_l_loop0        ;--> skip  ( because lim<=0 )
  972.     do    a,imdct_l_loop0
  973.  
  974. ;-- 1. input aliasing for 36pts idct
  975.     move    r7,r1                ;get r1 (input pointer)
  976.     move    x:synth_imfct_p,r5        ;r5=imdct input area
  977.     movec    #<18-1,m5            ;m5 -> modulo-18 addressing
  978.     move        x:(r1)+,a
  979.     move        x:(r1)+,x0    a,y0
  980.     add    x0,a    x:(r1)+,x0    a,y:(r5)+
  981.     sub    y0,a    x:(r1)+,x1    a,y:(r5)+
  982.     add    x0,a    x0,y1
  983.     add    y0,a    x:(r1)+,x0    a,y:(r5)+
  984.     add    x1,a    x1,b
  985.     do    #3,imdct_l_input_alias
  986.     add    x0,b    x0,y0
  987.     move        x:(r1)+,x1    a,y:(r5)+
  988.     add    y1,b    x:(r1)+,x0    b,y:(r5)+
  989.     add    x1,b    x1,a
  990.     add    x0,a    x0,y1
  991.     move        x:(r1)+,x1    b,y:(r5)+
  992.     add    y0,a    x:(r1)+,x0    a,y:(r5)+
  993.     add    x1,a    x1,b
  994. imdct_l_input_alias
  995.     add    x0,b    #<9-1,n0
  996.     move        x:(r1)+,x1    a,y:(r5)+
  997.     add    y1,b            b,y:(r5)+
  998.     add    x1,b    #<4,n5
  999.     move                b,y:(r5)+
  1000.  
  1001. ;-- 2. 9pts idct/butterflies/twiddle factors for even indices,
  1002. ;      and 36pts idct twiddle factors
  1003.     move    r5,r0                ;r0=&e0 (9 words in X: mem)
  1004.     move    #>imdct_l_tab,r2        ;r2=imdct coefficients
  1005.     lua    (r0)+n0,r1            ;r1=&e7 (should be named e8!)
  1006.     move                y:(r5)+n5,y0    ;;;
  1007.     tfr    y0,a    x:(r2)+,x0    y:(r5)+n5,y1
  1008.  
  1009.     mac    x0,y1,a    x:(r2)+,x0    y:(r5)+n5,y0
  1010.     mac    x0,y0,a    x:(r2)+,x1    y:(r5)+n5,y0    ;>>> 0.5    !! x1
  1011.     mac    x1,y0,a    x:(r2)+,x0    y:(r5)+n5,y0
  1012.     mac    x0,y0,a    x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp0/2
  1013.     asl    a                    ;a=tmp0
  1014.     mpy    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1015.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1016.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1017.     mac    x0,y0,b            y:(r5)+n5,y0    ;b'=tmp0_/2
  1018.     addl    a,b            y:(r5)+n5,y1    ;b=b'*2+a=b+a=e0 >>>0.5
  1019.     subl    b,a    b,x:(r0)+        ;a=a*2-b=2*a-(b+a)=a-b=e7
  1020. ;;;    rnd    b
  1021. ;;;    rnd    a    b,x:(r0)+
  1022.     tfr    y0,a    a,x:(r1)-
  1023.  
  1024.     mac    x1,y1,a            y:(r5)+n5,y0    ;>>> -0.5
  1025.     mac    -x1,y0,a        y:(r5)+n5,y0    ;>>> -1
  1026.     sub    y0,a            y:(r5)+n5,y0    ;>>> -0.5
  1027.     mac    -x1,y0,a x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp1/2  >>> 1.73/2
  1028.     asl    a            (r5)+n5        ;a=tmp0  >>> 0
  1029.     mpy    x0,y0,b            y:(r5)+n5,y0    ;>>> -1.73/2
  1030.     mac    -x0,y0,b        y:(r5)+n5,y0    ;>>> -1.73/2
  1031.     mac    -x0,y0,b        y:(r5)+n5,y0    ;b'=tmp1_/2    ;;;
  1032.     addl    a,b    x:(r2)+,x0    y:(r5)+n5,y1    ;b=b'*2+a=b+a=e1
  1033.     subl    b,a    b,x:(r0)+        ;a=a*2-b=2*a-(b+a)=a-b=e6
  1034. ;;;    rnd    b
  1035. ;;;    rnd    a    b,x:(r0)+
  1036.     tfr    y0,a    a,x:(r1)-
  1037.  
  1038.     mac    x0,y1,a    x:(r2)+,x0    y:(r5)+n5,y0
  1039.     mac    x0,y0,a            y:(r5)+n5,y0    ;>>> 0.5
  1040.     mac    x1,y0,a    x:(r2)+,x0    y:(r5)+n5,y0
  1041.     mac    x0,y0,a    x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp2/2
  1042.     asl    a                    ;a=tmp2
  1043.     mpy    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1044.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1045.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1046.     mac    x0,y0,b            y:(r5)+n5,y0    ;b'=tmp2_/2    ;;;
  1047.     addl    a,b    x:(r2)+,x0    y:(r5)+n5,y1    ;b=b'*2+a=b+a=e2
  1048.     subl    b,a    b,x:(r0)+        ;a=a*2-b=2*a-(b+a)=a-b=e5
  1049. ;;;    rnd    b
  1050. ;;;    rnd    a    b,x:(r0)+
  1051.     tfr    y0,a    a,x:(r1)-
  1052.  
  1053.     mac    x0,y1,a    x:(r2)+,x0    y:(r5)+n5,y0
  1054.     mac    x0,y0,a            y:(r5)+n5,y0    ;>>> 0.5
  1055.     mac    x1,y0,a    x:(r2)+,x0    y:(r5)+n5,y0
  1056.     mac    x0,y0,a    x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp3/2
  1057.     asl    a    #<18,n0        ;!;        ;a=tmp3
  1058.     mpy    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1059.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1060.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1061.     mac    x0,y0,b            y:(r5)+n5,y0    ;b'=tmp3_/2    ;;;
  1062.     addl    a,b            y:(r5)+n5,y1    ;b=b'*2+a=b+a=e3
  1063.     subl    b,a    b,x:(r0)        ;a=a*2-b=2*a-(b+a)=a-b=e4
  1064. ;;;    rnd    b
  1065. ;;;    rnd    a    b,x:(r0)
  1066.     tfr    y0,a    a,x:(r1)-
  1067.  
  1068.     sub    y1,a            y:(r5)+n5,y0
  1069.     add    y0,a            y:(r5)+n5,y0    
  1070.     sub    y0,a            y:(r5)+n5,y0    
  1071.     add    y0,a            (r5)-
  1072.     move        a,x:(r1)    y:(r5)+n5,y0
  1073.  
  1074. ;-- 3. 9pts idct/butterflies/twiddle factors for odd indices,
  1075. ;      and 36pts idct twiddle factors
  1076.     tfr    y0,a    x:(r2)+,x0    y:(r5)+n5,y1
  1077.     mac    x0,y1,a    x:(r2)+,x0    y:(r5)+n5,y0
  1078.     mac    x0,y0,a            y:(r5)+n5,y0    ;;; >>> 0.5
  1079.     mac    x1,y0,a    x:(r2)+,x0    y:(r5)+n5,y0
  1080.     mac    x0,y0,a    x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp0o/2
  1081.     asl    a    x:synth_imfct_p,r0    ;!;    ;a=tmp0o
  1082.     mpy    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1083.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1084.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1085.     mac    x0,y0,b    (r0)+n0        ;!;r0=&o0    ;b'=tmp0_o/2
  1086.     addl    a,b    n1,n0        ;!;        ;b=b'*2+a=b+a
  1087.     subl    b,a    #<9-1,n1    ;!;         ;a=a*2-b=2*a-(b+a)=a-b
  1088.     rnd    b    r0,r1        ;!;
  1089.     rnd    a    x:(r2)+,x0    b,y1
  1090.     mpyr    x0,y1,b    x:(r2)+,x0    a,y1        ;(a+b)*0.501..=o0
  1091.     mpy    x0,y1,a            b,y:(r0)+    ;;y:<o0 ;(a-b)*5.736/8
  1092.     asl    a    (r1)+n1        ;!;r1=&o7
  1093.     asl    a            y:(r5)+n5,y0    ;;; >>> 1
  1094.     asl    a            y:(r5)+n5,y1    ;;; >>> 0.5
  1095.     rnd    a    n0,n1        ;!;        ;*8=o7
  1096.     tfr    y0,a            a,y:(r1)-    ;;y:<o7
  1097.  
  1098.     mac    x1,y1,a            y:(r5)+n5,y0    ;;; >>> -0.5
  1099.     mac    -x1,y0,a        y:(r5)+n5,y0    ;;; >>> -1
  1100.     sub    y0,a            y:(r5)+n5,y0    ;;; >>> -0.5
  1101.     mac    -x1,y0,a x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp1o/2 >>> 1.73/2
  1102.     asl    a            (r5)+n5        ;a=tmp1o  >>> 0
  1103.     mpy    x0,y0,b            y:(r5)+n5,y0    ;;; >>> -1.73/2
  1104.     mac    -x0,y0,b        y:(r5)+n5,y0    ;;; >>> -1.73/2
  1105.     mac    -x0,y0,b                ;b'=tmp1_o/2
  1106.     addl    a,b    x:(r2)+,x0            ;b=b'*2+a=b+a
  1107.     subl    b,a    b,y1                ;a=a*2-b=2*a-(b+a)=a-b
  1108. ;;;    rnd    a
  1109. ;;;    rnd    b
  1110.     mpyr    x0,y1,b    x:(r2)+,x0    a,y1        ;(a+b)*0.517..=o1
  1111.     mpy    x0,y1,a            b,y:(r0)+    ;;y:<o1 ;(a-b)*1.931/2
  1112.     asl    a            y:(r5)+n5,y0    ;;; >>> 1
  1113.     rnd    a    x:(r2)+,x0    y:(r5)+n5,y1    ;*2=o6  >>> -0.34/2
  1114.     tfr    y0,a            a,y:(r1)-    ;;y:<o6
  1115.  
  1116.     mac    x0,y1,a    x:(r2)+,x0    y:(r5)+n5,y0    ;;; >>> -1.87/2
  1117.     mac    x0,y0,a            y:(r5)+n5,y0    ;;; >>> 0.5
  1118.     mac    x1,y0,a    x:(r2)+,x0    y:(r5)+n5,y0
  1119.     mac    x0,y0,a    x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp2o/2
  1120.     asl    a                    ;a=tmp2o
  1121.     mpy    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1122.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1123.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1124.     mac    x0,y0,b                    ;b'=tmp2_o/2
  1125.     addl    a,b    x:(r2)+,x0            ;b=b'*2+a=b+a
  1126.     subl    b,a    b,y1                ;a=a*2-b=2*a-(b+a)=a-b
  1127. ;;;    rnd    a
  1128. ;;;    rnd    b
  1129.     mpyr    x0,y1,b    x:(r2)+,x0    a,y1        ;(a+b)*0.551..=o2
  1130.     mpy    x0,y1,a            b,y:(r0)+    ;;y:<o2 ;(a-b)*1.183/2
  1131.     asl    a            y:(r5)+n5,y0    ;;; >>> 1
  1132.     rnd    a    x:(r2)+,x0    y:(r5)+n5,y1    ;*2=o5  >>> -1.53/2
  1133.     tfr    y0,a            a,y:(r1)-    ;;y:<o5
  1134.  
  1135.     mac    x0,y1,a    x:(r2)+,x0    y:(r5)+n5,y0    ;;; >>> 0.34/2
  1136.     mac    x0,y0,a            y:(r5)+n5,y0    ;;; >>> 0.5
  1137.     mac    x1,y0,a    x:(r2)+,x0    y:(r5)+n5,y0
  1138.     mac    x0,y0,a    x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp3o/2
  1139.     asl    a                    ;a=tmp3o
  1140.     mpy    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1141.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1142.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1143.     mac    x0,y0,b    x:synth_imfct_p,r4    ;!;    ;b'=tmp3_o/2
  1144.     addl    a,b    x:(r2)+,x0            ;b=b'*2+a=b+a
  1145.     subl    b,a    b,y1                ;a=a*2-b=2*a-(b+a)=a-b
  1146. ;;;    rnd    a
  1147. ;;;    rnd    b
  1148.     mpyr    x0,y1,b    x:(r2)+,x0    a,y1        ;(a+b)*0.610..=o3
  1149.     mpyr    x0,y1,a            b,y:(r0)    ;;y:<o3 ;(a-b)*0.871=o4
  1150.     move                a,y:(r1)-    ;;y:<o4
  1151.     move        x:(r2)+,x0    y:(r5)+n5,y0    ;compute tmp4o
  1152.     mpy     x0,y0,a        y:(r5)+n5,y0    ;;;
  1153.     mac    -x0,y0,a        y:(r5)+n5,y0    ;;;
  1154.     mac     x0,y0,a        y:(r5)+n5,y0    ;;;
  1155.     mac    -x0,y0,a        y:(r5)+n5,y0    ;;;
  1156.     movec    m7,m5        ;restore linear addressing
  1157.     mac    x0,y0,a    #<18,n5            ;!;
  1158.     asl    a    r4,r5            ;!;
  1159.     rnd    a    r4,r0            ;!;    ;a*2=tmp4o
  1160.     move        x:(r2),r2            ;imdct_l_tab2_p
  1161.     move        x:(r5)+n5,a    a,y:(r1)    ;;y:<o3b
  1162. ;            ;!; update r5
  1163. ;-- 4. 18pts idct
  1164. ;    ;r4=tmp ;r0=e0 ;r5=o0 ;r2=first coefficient
  1165.     move         x:(r2)+,x0    y:(r5)+,y0    ;x0=-0.250.. | y0=o0
  1166.     mpy    x0,y0,a     x:(r0)+,x1
  1167.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)+,y0
  1168.     do    #8,imdct_l_tmp0_8
  1169.     mpy    x0,y0,a     x:(r0)+,x1    a,y:(r4)+
  1170.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)+,y0    ;a=tmp[1], tmp[2], ...
  1171. imdct_l_tmp0_8
  1172.     move         x:(r0)-,x1    y:(r5)-,y0    ;update r0, r5
  1173.     move                 (r5)-
  1174.     move                 y:(r5)-,y0
  1175.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1176.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[9]
  1177.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1178.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[10]
  1179.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1180.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[11]
  1181.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1182.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[12]
  1183.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1184.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[13]/2
  1185.     asl    a                     ;a=tmp[13]
  1186.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1187.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[14]
  1188.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1189.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[15]/2
  1190.     asl    a                     ;a=tmp[15]
  1191.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1192.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[16]/2
  1193.     asl    a     #<8,n5        ;!;#<8,n5    ;a=tmp[16]
  1194.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1195.     mac    x0,x1,a     r7,r0        ;!;&xr[sb]    ;a=tmp[17]/8
  1196.     asl    a     n7,r1        ;!;&win
  1197.     asl    a     r4,r5
  1198.     asl    a                     ;a=tmp[17]
  1199.     rnd    a     (r5)-n5    ;!;&tmp[9]
  1200.     move                 a,y:(r4)
  1201.     move         n6,r4        ;!;&prev
  1202.  
  1203. ;-- 5. shift to imdct and save final result
  1204. ;    ;r5=&tmp[9] ;r4=&prev[sb] ;r1=&win[blocktype] ;r0=&xr[sb]
  1205. ;    ;... a.k.a. ...  s[sb][0] ... t_win[type][0]  ... res[sb]
  1206.     move         x:(r1)+,x0    y:(r5)+,y0
  1207.     move                 y:(r4)+,a
  1208.     macr    -x0,y0,a         y:(r4)+,b
  1209.     jclr    #0,n2,imdct_l_even            ;even or odd subband?
  1210.     do    #4,imdct_l_odd_final
  1211.     neg    b     x:(r1)+,x0    y:(r5)+,y0    
  1212.     macr    x0,y0,b     a,x:(r0)+    y:(r4)+,a
  1213.     move         x:(r1)+,x0    y:(r5)+,y0
  1214.     macr    -x0,y0,a b,x:(r0)+    y:(r4)+,b
  1215. imdct_l_odd_final
  1216.     move    (r5)-
  1217.     do    #5,imdct_l_odd_final2
  1218.     move         x:(r1)+,x0    y:(r5)-,y0    
  1219.     macr    x0,y0,b     a,x:(r0)+    y:(r4)+,a
  1220.     neg    b     x:(r1)+,x0    y:(r5)-,y0
  1221.     macr    x0,y0,a     b,x:(r0)+    y:(r4)+,b
  1222. imdct_l_odd_final2
  1223.     jmp    imdct_l_upd_prev
  1224.  
  1225. imdct_l_even
  1226.     do    #4,imdct_l_even_final
  1227.     move         x:(r1)+,x0    y:(r5)+,y0
  1228.     macr    -x0,y0,b a,x:(r0)+    y:(r4)+,a
  1229.     move         x:(r1)+,x0    y:(r5)+,y0
  1230.     macr    -x0,y0,a b,x:(r0)+    y:(r4)+,b
  1231. imdct_l_even_final
  1232.     move    (r5)-
  1233.     do    #5,imdct_l_even_final2
  1234.     move         x:(r1)+,x0    y:(r5)-,y0    
  1235.     macr    x0,y0,b     a,x:(r0)+    y:(r4)+,a
  1236.     move         x:(r1)+,x0    y:(r5)-,y0
  1237.     macr    x0,y0,a     b,x:(r0)+    y:(r4)+,b
  1238. imdct_l_even_final2
  1239.  
  1240. ;-- 6. update 'prev' for next imdct
  1241. imdct_l_upd_prev
  1242.     move    n6,r4
  1243.     do    #9,imdct_l_upd_prev1
  1244.     mpyr    x0,y0,a    x:(r1)+,x0    y:(r5)-,y0
  1245.     move                a,y:(r4)+
  1246. imdct_l_upd_prev1
  1247.     move    (r5)+
  1248.     move    (r5)+
  1249.     move                y:(r5)+,y0
  1250.     do    #9,imdct_l_upd_prev2
  1251.     mpyr    x0,y0,a    x:(r1)+,x0    y:(r5)+,y0
  1252.     move                a,y:(r4)+
  1253. imdct_l_upd_prev2
  1254.     move    r0,r7                ;update xr pointer
  1255.     move    r4,n6                ;update prev pointer
  1256.     bchg    #0,n2                ;toggle subband (even/odd)
  1257. imdct_l_loop0
  1258.  
  1259.  
  1260.  
  1261. ;    ;n1=lim ;r7=xr(in/out) ;n6=prev ;n2=sb&1
  1262.  
  1263. ;****** IMDCT for SHORT bands
  1264.     move    n1,x0            ;lim
  1265.     move    #>32,a
  1266.     sub    x0,a    r7,n7        ;n7=xr                !! n7
  1267.     jle    imdct_s_loop0        ;--> skip  ( because lim>=32 )
  1268.  
  1269.     do    a,imdct_s_loop0
  1270. ;-- 1. clear the out table
  1271.     clr    a    x:synth_imfct_p,r0
  1272.     move    #<36-6,n0
  1273.     rep    #36
  1274.     move    a,y:(r0)+
  1275.     lua    (r0)-n0,r6        ;r6=&out[6]
  1276.     move    #<40-36,n0
  1277.     move    n7,r1            ;r1=xr (input)
  1278.     move    #<3,n1
  1279.     lua    (r0)+n0,r5        ;r5=&in[0] (align 8!!)
  1280.     movec    #<6-1,m5        ;(modulo-6 addressing)
  1281.  
  1282.     do    #3,imdct_s_next        ;three imdct to do
  1283. ;-- 2. input aliasing for 36/18 pts idct
  1284.     move        x:(r1)+n1,a
  1285.     move        x:(r1)+n1,x0    a,y0
  1286.     add    x0,a    x:(r1)+n1,x0    a,y:(r5)+
  1287.     sub    y0,a    x:(r1)+n1,x1    a,y:(r5)+
  1288.     add    x0,a    x0,y1
  1289.     add    y0,a    x:(r1)+n1,x0    a,y:(r5)+
  1290.     add    x1,a    x1,b
  1291.     add    x0,b    x:(r1)+n1,x1    a,y:(r5)+
  1292.     add    y1,b            b,y:(r5)+
  1293.     add    x1,b    #<2,n5
  1294.     move                b,y:(r5)+
  1295.  
  1296.     movec    #<6-1,m4        ;(modulo-6 addressing)
  1297.     move    r5,r4            ;r4=odd adresses...
  1298.     move    #<2,n4
  1299.     move    (r4)+
  1300.     move    #>imdct_s_tab,r2    ;r2=imdct coefficients
  1301.     move    #<5,n3            ;!;
  1302.     move    r6,r3            ;!;
  1303.  
  1304. ;-- 3. 3pts/6pts idct with twiddle factor for odd indices,
  1305. ;      and output butterflies for 2*3 pts = 6 pts idct
  1306.     move                y:(r4)+n4,y0
  1307.     tfr    y0,b    x:(r2)+,x1    y:(r4)+n4,y1    ;>>> 0.866
  1308.     mac    x1,y1,b    x:(r2)+,x0    y:(r4)+n4,y0    ;>>> 0.5
  1309.     macr    x0,y0,b            y:(r5)+n5,y0
  1310.     tfr    y0,a            y:(r5)+n5,y0
  1311.     mac    x1,y0,a            y:(r5)+n5,y0
  1312.     mac    x0,y0,a    x:(r2)+,x0    b,y0        ;>>> 0.517
  1313.     mpy    x0,y0,b            y:(r4)+n4,y0
  1314.     add    a,b            (r4)+n4        ;>>> 0
  1315.     subl    b,a    r6,r0        ;!;&tmp0b
  1316.     rnd    b    (r3)+n3        ;!;&tmp5b
  1317.     rnd    a    b,x:(r0)+    ;!;y:<tmp0b
  1318.     tfr    y0,b    a,x:(r3)-    ;!;y:<tmp5b
  1319.     move                y:(r4)+n4,y0    ;>>> -1
  1320.     sub    y0,b            y:(r5)+n5,y0
  1321.     tfr    y0,a            (r5)+n5
  1322.     move                y:(r5)+n5,y0
  1323.     sub    y0,a    x:(r2)+,x0    b,y0        ;>>> 0.707
  1324.     mpy    x0,y0,b            y:(r4)+n4,y0
  1325.     add    a,b            y:(r4)+n4,y1    ;>>> -0.866
  1326.     subl    b,a    #<18-1,n1
  1327.     rnd    b    #<2,n0        ;!;
  1328.     rnd    a    b,x:(r0)+    ;!;y:<tmp1b
  1329.     tfr    y0,b    a,x:(r3)    ;!;y:<tmp4b
  1330.     mac    -x1,y1,b x:(r2)+,x0    y:(r4)+n4,y0    ;>>> 0.5
  1331.     macr    x0,y0,b            y:(r5)+n5,y0
  1332.     tfr    y0,a            y:(r5)+n5,y0
  1333.     mac    -x1,y0,a         y:(r5)+n5,y0
  1334.     mac    x0,y0,a    x:(r2)+,x0    b,y0        ;>>> 1.93/2
  1335.     mpy    x0,y0,b    x:(r3)+,y0    ;!;y:<tmp4b
  1336.     addl    a,b    #<5,n4
  1337.     subl    b,a    r6,r4        ;x:<out_adr
  1338.     move        r6,r7
  1339.     movec    m7,m4            ;(linear addressing)
  1340.     rnd    b    x:(r3)-,y1    ;!;y:<tmp5b
  1341.     rnd    a    b,x:(r0)-n0    ;!;y:<tmp2b
  1342.     move        x:(r2),r2            ;imdct_s_tab2_p
  1343.     move        a,x0        ;!;y:<tmp3b
  1344.  
  1345. ;-- 4. twiddle factors, shift to 12pts imdct and multiply by window type 2
  1346. ;    ;r4=&out[ss+6]; n4=-2 ;r2=first coefficient
  1347.     move        x:(r2)+,x1    y:(r4)+,a
  1348.     macr    x1,x0,a    x:(r2)+,x1    y:(r4)+,b
  1349.     move                a,y:(r7)+    ;;;(r4+n4)
  1350.     macr    x1,y0,b    x:(r2)+,x1    y:(r4)+,y0
  1351.     mpyr    x1,y1,a            b,y:(r7)+    ;;;(r4+n4)
  1352.     asl    a    (r1)-n1
  1353.     asl    a    #<3,n1
  1354.     add    y0,a    x:(r2)+,x1    y:(r4)+,y0
  1355.     mpyr    x1,y1,b            a,y:(r7)+    ;;;(r4+n4)
  1356.     asl    b    
  1357.     asl    b    x:(r2)+,x1    y:(r4)+,y1
  1358.     add    y0,b    x:(r3),y0            ;!;y:<tmp4b
  1359.     mpyr    x1,y0,a            b,y:(r7)+    ;;;(r4+n4)
  1360.     asl    a    x:(r2)+,x1    y:(r4)+,b
  1361.     add    y1,a    x:(r0)+,y1            ;!;y:<tmp0b
  1362.     macr    x1,x0,b            a,y:(r7)+    ;;;(r4+n4)
  1363.     move        x:(r2)+,x1    y:(r4)+,a
  1364.     move        x:(r0)+,y0            ;!;y:<tmp1b
  1365.     move        x:(r0),x0            ;!;y:<tmp2b
  1366.     macr    x1,x0,a            b,y:(r7)+    ;;;(r4+n4)
  1367.     move        x:(r2)+,x1    y:(r4)+,b
  1368.     macr    x1,y0,b            a,y:(r7)+    ;;;(r4+n4)
  1369.     move        x:(r2)+,x1    y:(r4)+,a
  1370.     macr    x1,y1,a            b,y:(r7)+    ;;;(r4+n4)
  1371.     move        x:(r2)+,x1    y:(r4)+,b
  1372.     macr    x1,y1,b            a,y:(r7)+    ;;;(r4+n4)
  1373.     move        x:(r2)+,x1    y:(r4)+,a
  1374.     macr    x1,y0,a            b,y:(r7)+    ;;;(r4+n4)
  1375.     move        x:(r2)+,x1    y:(r4)-,b
  1376.     macr    x1,x0,b            a,y:(r4)+
  1377.     move                b,y:(r4)-n4
  1378.     move    r4,r6
  1379. imdct_s_next
  1380.  
  1381. ;-- 5- compute final result for polyphase filter
  1382.     movec    m7,m5            ;(linear addressing)
  1383.     move    n7,r0            ;r0=x:xr[sb]
  1384.     move    x:synth_imfct_p,r5    ;r5=y:out[0]
  1385.     move    n6,r4            ;r4=y:prev[sb][0]
  1386.     move                y:(r5)+,y0
  1387.     jclr    #0,n2,imdct_s_even    ;even or odd subband?
  1388.     move                y:(r4)+,b
  1389.     add    y0,b            y:(r4)+,a
  1390.     move        b,x:(r0)+    y:(r5)+,y1
  1391.     add    y1,a            y:(r4)+,b
  1392.     neg    a            y:(r5)+,y0
  1393.     do    #8,imdct_s_odd_final
  1394.     add    y0,b    a,x:(r0)+    y:(r4)+,a
  1395.     move        b,x:(r0)+    y:(r5)+,y1
  1396.     add    y1,a            y:(r4)+,b
  1397.     neg    a            y:(r5)+,y0
  1398. imdct_s_odd_final
  1399.     move        a,x:(r0)+    y:(r5)-,y0
  1400.     move    n6,r4
  1401.     do    #18,imdct_s_upd_prev
  1402.     move                y:(r5)+,y0
  1403.     move                y0,y:(r4)+
  1404. imdct_s_upd_prev
  1405.     jmp    imdct_s_even_final
  1406. imdct_s_even
  1407.     move    #<17,n5
  1408.     move                y:(r4),b
  1409.     do    #18,imdct_s_even_final
  1410.     add    y0,b            y:(r5+n5),y0
  1411.     move        b,x:(r0)+    y0,y:(r4)+
  1412.     move                y:(r4),b
  1413.     move                y:(r5)+,y0
  1414. imdct_s_even_final
  1415.     move    r0,n7                ;update xr pointer
  1416.     move    r4,n6                ;update prev pointer
  1417.     bchg    #0,n2                ;toggle subband (even/odd)
  1418. imdct_s_loop0
  1419.  
  1420.  
  1421.  
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427. ;*****************************************************************************
  1428. ;*** synthesis (polyphase filter)
  1429. ;*****************************************************************************
  1430.     move    x:outbuf,r1
  1431.     move    r1,x:synth_out_p
  1432.     move    x:xr_p,r0
  1433.     move    #<$02,a            ;1<<17 = %00000010.00000000.00000000
  1434.  
  1435. synth_loop18_head
  1436.     move    a,x:synth_count18
  1437.     move    r0,x:synth_in_p
  1438.     move    x:synth_imfct_p,n7        ;            !! n7
  1439.  
  1440. ;    ** first butterfly pass
  1441.     move    #<18,n0
  1442.     move    n7,r1                ;x:synth_imfct_p
  1443.     move    n7,r5
  1444.     move    #0.70710678,y0            ;cos(pi/4)
  1445.     move            x:(r0)+n0,x0
  1446.     do    #8,synth_bfy1
  1447.     mpyr     x0,y0,a    x:(r0)+n0,x0
  1448.     mpyr    -x0,y0,a    a,x:(r1)+    a,y:(r5)+
  1449.     move            a,x:(r1)+
  1450.     mpyr     x0,y0,a    x:(r0)+n0,x0
  1451.     mpyr    -x0,y0,a    x:(r0)+n0,x0    a,y:(r5)+
  1452.     mpyr     x0,y0,a    a,x:(r1)+    a,y:(r5)+
  1453.     mpyr    -x0,y0,a    a,x:(r1)+
  1454.     move            x:(r0)+n0,x0    a,y:(r5)+
  1455. synth_bfy1
  1456.  
  1457. ;    ** second butterfly pass
  1458.     move    n7,a                ;x:synth_imfct_p
  1459.     move    #>16,x0
  1460.     add    x0,a    a,r0
  1461.     add    x0,a    a,r4
  1462.     add    x0,a    a,r6
  1463.     move        a,r5
  1464.     lua    (r0)+,r7
  1465.     move            x:(r0),b    y:(r4),y0
  1466.     do    #16,synth_bfy2
  1467.     add    y0,b        x:(r4),x1    y:(r0),a
  1468.     sub    x1,a        b,x:(r5)    y:(r0),b
  1469.     add    x1,b        x:(r0),a    a,y:(r5)+
  1470.     sub    y0,a        x:(r0),b    b,y:(r6)
  1471.     sub    x1,b        a,x:(r6)+    y:(r0),a
  1472.     sub    y0,a        b,x:(r4)    y:(r0),b
  1473.     add    y0,b        x:(r0),a    a,y:(r4)+
  1474.     add    x1,a        x:(r7)+,b    b,y:(r0)    ;!b
  1475.     move            a,x:(r0)+    y:(r4),y0    ;!y0
  1476. synth_bfy2
  1477.  
  1478.     ori    #$08,mr                ;SCALE UP mode
  1479. ;this nice feature allows us to automatically scale up the samples during
  1480. ;the next processing steps, so we can save the ASL's in the final loop which
  1481. ;writes PCM samples to the output buffer (we need to shift left by 6 bits)
  1482.  
  1483.  
  1484. ;    ** perform the rest of the butterfly passes
  1485.     move    x:synth_tab_rsincosx_p,n6    ;x:synth_tab_rsincosx_p    !! n6
  1486.     move    n7,r0                ;x:synth_imfct_p
  1487.     movec    #<64-1,m0            ;modulo-64 addressing
  1488.     movec    #<64-1,m4            ;modulo-64 addressing
  1489.  
  1490. ;    ** pass 3  - SCALE UP (1/6)
  1491.     move    n6,r6                ;x:synth_tab_rsincosx_p
  1492.     move    #<8,n0
  1493.     move    #<8,n4
  1494.     move    r0,r4
  1495.     do    #4,synth_grp3
  1496.     lua    (r0)+n0,r5
  1497.     move    r5,r2
  1498.     move            x:(r6),x0
  1499.     move            x:(r0),b    y:(r5),y1
  1500.     mac    -x0,y1,b    x:(r2)+,x1    y:(r6)+,y0
  1501.     do    #8,synth_bfy3
  1502.     macr    y0,x1,b        x:(r0),a
  1503.     subl    b,a        b,x:(r0)    y:(r4)+,b
  1504.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1
  1505.     macr    x0,x1,b                y:(r0),a
  1506.     subl    b,a        x:(r4),b    b,y:(r0)+
  1507.     mac    -x0,y1,b    x:(r2)+,x1    a,y:(r5)+
  1508. synth_bfy3
  1509.     move            x:(r0)+n0,x0    y:(r4)+n4,y0    ;update r0, r4
  1510. synth_grp3
  1511.  
  1512.     movec    #<64-1,m2            ;modulo-64 addressing
  1513.     movec    #<64-1,m5            ;modulo-64 addressing
  1514.  
  1515. ;    ** pass 4  - SCALE UP (2/6)
  1516.     move    n6,r6                ;x:synth_tab_rsincosx_p
  1517.     move    #<4+0,n0
  1518.     move    #<4+1,n2
  1519.     move    #<4+1,n4
  1520.     move    #<4+1,n5
  1521.     lua    (r0)+n0,r5
  1522.     move    r5,r2
  1523.     move            x:(r6),x0
  1524.     move            x:(r0),b    y:(r5),y1
  1525.     do    #8,synth_grp4
  1526.     mac    -x0,y1,b    x:(r2)+,x1    y:(r6)+,y0
  1527.     macr    y0,x1,b        x:(r0),a
  1528.     subl    b,a        b,x:(r0)    y:(r4)+,b
  1529.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1
  1530.     macr    x0,x1,b                y:(r0),a
  1531.     subl    b,a        x:(r4),b    b,y:(r0)+
  1532.     mac    -x0,y1,b    x:(r2)+,x1    a,y:(r5)+
  1533.     macr    y0,x1,b        x:(r0),a
  1534.     subl    b,a        b,x:(r0)    y:(r4)+,b
  1535.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1
  1536.     macr    x0,x1,b                y:(r0),a
  1537.     subl    b,a        x:(r4),b    b,y:(r0)+
  1538.     mac    -x0,y1,b    x:(r2)+,x1    a,y:(r5)+
  1539.     macr    y0,x1,b        x:(r0),a
  1540.     subl    b,a        b,x:(r0)    y:(r4)+,b
  1541.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1
  1542.     macr    x0,x1,b                y:(r0),a
  1543.     subl    b,a        x:(r4),b    b,y:(r0)+
  1544.     mac    -x0,y1,b    x:(r2)+n2,x1    a,y:(r5)+    ;update r2
  1545.     macr    y0,x1,b        x:(r0),a
  1546.     subl    b,a        b,x:(r0)    y:(r4)+n4,b    ;update r4
  1547.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1    ;!y1
  1548.     macr    x0,x1,b        x:(r6),x0    y:(r0),a    ;!x0
  1549.     subl    b,a        x:(r4),b    b,y:(r0)+    ;!b
  1550.     move            x:(r0)+n0,a    a,y:(r5)+n5    ;update r0, r5
  1551. synth_grp4
  1552.  
  1553. ;    ** pass 5  - SCALE UP (3/6)
  1554.     move    n6,r6                ;x:synth_tab_rsincosx_p
  1555.     move    #<2+0,n0
  1556.     move    #<2+1,n2
  1557.     move    #<2+1,n4
  1558.     move    #<2+1,n5
  1559.     lua    (r0)+n0,r5
  1560.     move    r5,r2
  1561.     move            x:(r6),x0
  1562.     move            x:(r0),b    y:(r5),y1
  1563.     do    #16,synth_grp5
  1564.     mac    -x0,y1,b    x:(r2)+,x1    y:(r6)+,y0
  1565.     macr    y0,x1,b        x:(r0),a
  1566.     subl    b,a        b,x:(r0)    y:(r4)+,b
  1567.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1
  1568.     macr    x0,x1,b                y:(r0),a
  1569.     subl    b,a        x:(r4),b    b,y:(r0)+
  1570.     mac    -x0,y1,b    x:(r2)+n2,x1    a,y:(r5)+    ;update r2
  1571.     macr    y0,x1,b        x:(r0),a
  1572.     subl    b,a        b,x:(r0)    y:(r4)+n4,b    ;update r4
  1573.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1    ;!y1
  1574.     macr    x0,x1,b        x:(r6),x0    y:(r0),a    ;!x0
  1575.     subl    b,a        x:(r4),b    b,y:(r0)+    ;!b
  1576.     move            x:(r0)+n0,a    a,y:(r5)+n5    ;update r0, r5
  1577. synth_grp5
  1578.  
  1579. ;    ** pass 6  - SCALE UP (4/6)
  1580.     move    n6,r6                ;x:synth_tab_rsincosx_p
  1581.     move    #<1+1,n2
  1582.     move    #<1+1,n4
  1583.     move    #<1+1,n5
  1584.     lua    (r0)+,r5
  1585.     move    r5,r2
  1586.     move            x:(r6),x0
  1587.     move            x:(r0),b    y:(r5),y1
  1588.     do    #32,synth_grp6
  1589.     mac    -x0,y1,b    x:(r2)+n2,x1    y:(r6)+,y0    ;update r2
  1590.     macr    y0,x1,b        x:(r0),a
  1591.     subl    b,a        b,x:(r0)    y:(r4)+n4,b    ;update r4
  1592.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1    ;!y1
  1593.     macr    x0,x1,b        x:(r6),x0    y:(r0),a    ;!x0
  1594.     subl    b,a        x:(r4),b    b,y:(r0)+    ;!b
  1595.     move            x:(r0)+,a    a,y:(r5)+n5    ;update r0, r5
  1596. synth_grp6
  1597.  
  1598.     movec    m7,m2                ;linear addressing
  1599.     movec    m7,m4                ;linear addressing
  1600.     movec    m7,m5                ;linear addressing
  1601.  
  1602. ;    ** unscrambling and final adjustments  - SCALE UP (5/6)
  1603.     move    x:synth_audio_pp,r5
  1604.     move    #>synth_tab_cosx,r4
  1605.     move    #>synth_tab_sinx,r6
  1606.     move    x:(r5),r5
  1607.     movec    #<0,m0                ;bit-reverse addressing
  1608.     move    #<32,n0
  1609.     move            x:(r0),x1    y:(r4)+,y1
  1610.     mpy    y1,x1,a                y:(r6)+,y0
  1611.     move                    y:(r0)+n0,y1
  1612.     macr    -y0,y1,a    x:(r0),x1    y:(r4)+,y1
  1613.     move                    y:(r6)+,y0
  1614. synth_unscramble_start
  1615. ;------    move    #synth_unscramble,r7
  1616. ;------    jmp    <synth_unscramble_start
  1617.     do    #64-1,synth_unscramble
  1618.     mpy    y1,x1,a        a,x:(r5)+    y:(r0)+n0,y1
  1619.     macr    -y0,y1,a    x:(r0),x1    y:(r4)+,y1
  1620.     move                    y:(r6)+,y0
  1621. synth_unscramble
  1622. ;------    5+1 words, return: jmp (r7)
  1623.     move            a,x:(r5)+
  1624.  
  1625. ;    ** window audio data - output PCM samples  - SCALE UP (6/6)
  1626.     move    x:synth_out_p,r6
  1627.     move    x:channel_counter,b
  1628.     move    x:channels,x0
  1629.     sub    x0,b    n7,r5            ;x:synth_imfct_p
  1630.     teq    b,a    r6,r5            ;outbuf (x:-mem, left ch.)
  1631.  
  1632.     move    x:synth_audio_pp,r0
  1633.     movec    #1024-1,m0            ;modulo addressing
  1634.     movec    m0,m1                ;modulo addressing
  1635.     move    x:(r0),r0
  1636.     move    #<96,n0
  1637.     move    #>synth_tab_window,r4
  1638.     lua    (r0)+n0,r1
  1639.     move    x:synth_window_p,r3
  1640.     move    #<128,n0
  1641.     move    #<128,n1
  1642.     jsr    (r3)                ;write to left channel (or tmp)
  1643.  
  1644.     andi    #$f3,mr                ;NO SCALING mode
  1645.  
  1646.     tst    b    n7,r3            ;x:synth_imfct_p
  1647.     jeq    synth_out_done
  1648.     move    r6,r5                ;outbuf (y:-mem, right ch.)
  1649.     move    x:(r3)+,a
  1650.     rep    #32                ;(copy from tmp)
  1651.     move    x:(r3)+,a    a,y:(r5)+    ;write to right channel
  1652. synth_out_done
  1653.     move    r5,x:synth_out_p
  1654.  
  1655. ;    ** update audio buffer pointer
  1656.     move    x:synth_audio_pp,r1
  1657.     move    #<64,n0
  1658.     move    x:(r1),r0
  1659.     movec    m7,m1                ;linear addressing
  1660.     move    (r0)-n0
  1661.     movec    m7,m0                ;linear addressing
  1662.     move    r0,x:(r1)
  1663.  
  1664. ;    ** loop 18 times
  1665.     move    x:synth_in_p,r0
  1666.     move    x:synth_count18,a
  1667.     lsr    a    (r0)+
  1668.     jne    synth_loop18_head
  1669.  
  1670.  
  1671.  
  1672.     move    x:si_tab_p,r0
  1673.     move    #>xr1,r1
  1674.     move    #>hybrid_prev1,r2
  1675.     move    #>synth_audio_r_p,r3
  1676.     move    #<0,x0
  1677.     move    y:forcemono,b
  1678.     tst    b    x:channel_counter,a
  1679.     tne    x0,a
  1680.     lsr    a    (r0)+
  1681.     jne    hybrid_synth_channel_loop    ;next channel
  1682.  
  1683. ;****** for(ch=0;ch<stereo;ch++)    ;end************************
  1684.  
  1685.  
  1686.     move    x:outbuf,r1
  1687.     move    #576,n1
  1688.     move    #>si_tab+2,r0
  1689.     move    #>granule1_sfsi,n0
  1690.     move    (r1)+n1
  1691.     move    x:granule_counter,a
  1692.     tst    a    #<1,a
  1693.     jeq    decode_granule_loop    ;decode second granule
  1694.  
  1695. ;****** for(gr=0;gr<ngr;gr++)        ;end************************
  1696.  
  1697.  
  1698.  
  1699.  
  1700. ;    do    #500,overload0
  1701. ;    do    #1000,overload1
  1702. ;    nop
  1703. ;overload1
  1704. ;    nop
  1705. ;overload0
  1706.  
  1707.     move    #<0,x0
  1708.     move    x0,y:busy        ;clear BUSY
  1709.     rts                ;it's done.
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720. synth_window_start
  1721.     do    #32,synth_window
  1722.     move            x:(r0)+n0,x0    y:(r4)+,y0
  1723.     mpy    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1724.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1725.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1726.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1727.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1728.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1729.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1730.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1731.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1732.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1733.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1734.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1735.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1736.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1737.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1738.     macr    x0,y0,a        (r0)+
  1739.     move            a,x:(r5)+    y:(r1)+,a    ;update r1
  1740. synth_window
  1741.     rts
  1742. synth_window_end
  1743. ;        ** 21 words
  1744.  
  1745.  
  1746. getbits_init
  1747.     clr    b    r7,x:getbits_stream
  1748.     move    b,x:getbits_count
  1749.     move    #<$80,b            ;end marker
  1750.     move    b,x:getbits_temp
  1751. getbits_continue
  1752.     move    x:getbits_p,r5        ;getbits(n7) -> jsr (r5)
  1753.     clr    b    x:getbit1_p,r6    ;getbit1()   -> jsr (r6)
  1754.     move    x:getbits_stream,r7    ;!! DO NOT TOUCH !!
  1755.     move    x:getbits_temp,b1    ;!! DO NOT TOUCH !!
  1756.     move    x:getbits_count,b0    ;!! DO NOT TOUCH !!
  1757.     rts
  1758.  
  1759. getbits_pause
  1760.     move    r7,x:getbits_stream
  1761.     move    b1,x:getbits_temp
  1762.     move    b0,x:getbits_count
  1763.     rts
  1764.  
  1765. getbits__
  1766.     do    n7,getbits_loop        ;n7=number_of_bits
  1767.     inc    b            ;b0=b0+1  (increment bit counter)
  1768.     lsl    b            ;b1=b1<<1 (new CARRY bit)
  1769.     jne    getbits_ne
  1770.     move    x:(r7)+,b1        ;fetch next 24 bits
  1771.     rol    b            ;b1=b1<<1, append end marker
  1772. getbits_ne
  1773.     rol    a            ;get CARRY bit, set condition code ZERO
  1774. getbits_loop
  1775.     rts
  1776.  
  1777. getbit1__
  1778.     inc    b            ;b0=b0+1  (increment bit counter)
  1779.     lsl    b    #<0,a        ;b1=b1<<1 (new CARRY bit)
  1780.     jne    getbit1_ne
  1781.     move    x:(r7)+,b1        ;fetch next 24 bits
  1782.     rol    b            ;b1=b1<<1, append end marker
  1783. getbit1_ne
  1784.     rol    a            ;get CARRY bit, set condition code ZERO
  1785.     rts
  1786.  
  1787.  
  1788.  
  1789.  
  1790.  
  1791.  
  1792.  
  1793.  
  1794.  
  1795.  
  1796.  
  1797.  
  1798. ;*****************************************************************************
  1799. ;*** initialize
  1800. ;*****************************************************************************
  1801. ; parameters
  1802. ;  x1 - mem_mp3 (64+32+30=126 words in INTERNAL L-memory)
  1803. ;  x0 - mem_mp3p (21+6=27 words in INTERNAL P-memory)
  1804. ;  y1 - freq_idx (0, 1 or 2 - extracted from frame header)
  1805. ;  y0 - mem_x_mp3_ro (3*576 words in X-memory, allocated by main program)
  1806. init
  1807.     move    y0,r7
  1808.  
  1809. ;********* hybrid filter + synthesis: fast L-data buffer
  1810. ;********* (64 words - major speedup!!)
  1811.     tfr    x1,a        #>64,x1
  1812.     tst    a        #>synth_tab_rsinxrcosx,r0
  1813.     jeq    init_no_lmem
  1814.     add    x1,a        a,x:synth_imfct_p
  1815.  
  1816. ;********* synthesis: rsinx_rcosx table to fast L-data memory
  1817. ;********* (32 words - little speedup)
  1818.     move    a,x:synth_tab_rsincosx_p
  1819.     move    a,r4
  1820.     move    x:(r0),a
  1821.     do    #32,init_loop_l0
  1822.     move    a,x:(r4)    y:(r0)+,a
  1823.     move    x:(r0),a    a,y:(r4)+
  1824. init_loop_l0
  1825.  
  1826. ;********* hybrid filter: imdct_l_tab2 to fast X-data memory
  1827. ;********* (18 words - tiny speedup)
  1828.     move    #>imdct_l_tab2_p,r0
  1829.     move    r4,r1            ;r1=32 words fast Y-mem pointer
  1830.     move    r4,x:(r0)+
  1831.     move    #>imdct_s_tab2_p,r2    ;next...
  1832.     do    #18,init_loop_l1
  1833.     move    x:(r0)+,a
  1834.     move    a,x:(r4)+
  1835. init_loop_l1
  1836.  
  1837. ;********* hybrid filter: imdct_s_tab2 to fast X-data memory
  1838. ;********* (12 words - tiny speedup)
  1839.     move    r4,x:(r2)+
  1840.     move    #>cs_ca_tab_p,r0    ;next...
  1841.     do    #12,init_loop_l2
  1842.     move    x:(r2)+,a
  1843.     move    a,x:(r4)+
  1844. init_loop_l2
  1845.  
  1846. ;********* hybrid filter: cs_ca_tab to fast Y-data memory
  1847. ;********* (16 words - tiny speedup)
  1848.     move    x:(r0),r2
  1849.     move    r1,x:(r0)
  1850.     do    #16,init_loop_l3    ;14 words Y-mem remain unused...
  1851.     move    y:(r2)+,a
  1852.     move    a,y:(r1)+
  1853. init_loop_l3
  1854.  
  1855.  
  1856.  
  1857. init_no_lmem
  1858.     tfr    x0,a        #synth_window_start,r0
  1859.     tst    a        x0,r1
  1860.     jeq    init_no_pmem
  1861.  
  1862. ;********* synthesis: window loop to fast program memory
  1863. ;********* (21 words - major speedup!!)
  1864.     move    x0,x:synth_window_p
  1865.     lua    (r1)+,r2
  1866.     do    #synth_window_end-synth_window_start,init_loop_p0
  1867.     movem    p:(r0)+,x1
  1868.     movem    x1,p:(r1)+
  1869. init_loop_p0
  1870.     tfr    x0,a        #>synth_window-synth_window_start-1,x0
  1871.     add    x0,a        #>synth_unscramble_start,r0
  1872.     movem    a,p:(r2)
  1873.  
  1874. ;********* synthesis: unscramble loop to fast program memory
  1875. ;********* (6 words - tiny speedup)
  1876.     move    r1,a
  1877.     tfr    a,b        r0,r2
  1878.     movem    p:(r0)+,x1
  1879.     movem    x1,p:(r1)+        ;copy first word of 'do'
  1880.     move    #>synth_unscramble-synth_unscramble_start-1,x0
  1881.     add    x0,a        (r0)+
  1882.     movem    a,p:(r1)+        ;second word of 'do' (absolute address)
  1883.     do    #synth_unscramble-synth_unscramble_start-2,init_loop_p1
  1884.     movem    p:(r0)+,x1
  1885.     movem    x1,p:(r1)+        ;copy the rest
  1886. init_loop_p1
  1887.     move    #>synth_unscramble_help,r3
  1888.     move    #>$0c0000,y0        ;short jump 'jmp xxx'
  1889.     movem    p:(r3)+,x1
  1890.     movem    x1,p:(r1)+        ;copy 'jmp (r7)'
  1891.     movem    p:(r3)+,x1
  1892.     movem    x1,p:(r2)+
  1893.     movem    p:(r3),x1
  1894.     movem    x1,p:(r2)+        ;copy 'move #synth_unscramble,r7'
  1895.     or    y0,b
  1896.     movem    b,p:(r2)        ;short jump 'jmp <synth_unscramble_start'
  1897.  
  1898.  
  1899.  
  1900.  
  1901.  
  1902. init_no_pmem
  1903. ;****** select scalefactor_band tables (using freq_idx)
  1904.     move    y1,n0            ;freq_idx
  1905.     move    #>sfbands_tab,r0
  1906.     nop
  1907.     move    x:(r0+n0),a
  1908.     move    #>sfbandl_tab,r0
  1909.     move    a,x:sfbands_p
  1910.     move    a,r1
  1911.     move    x:(r0+n0),a
  1912.     move    a,x:sfbandl_p
  1913.  
  1914. ;****** prepare reorder tables
  1915. ; ro0 - no reordering  (blocktype!=2)
  1916.     move    r7,x:ro0_p
  1917.     clr    a    #>1,x0
  1918.     rep    #576
  1919.     add    x0,a    a,x:(r7)+
  1920.  
  1921. ; ro1 - full reordering  (blocktype==2 && !mixedblock)
  1922.     move    r7,x:ro1_p
  1923.     move    x:(r1)+,y0        ;x:sfbands_p
  1924.     do    #13,init_ro1
  1925.     move    x:(r1)+,a
  1926.     move    a,y1
  1927.     sub    y0,a    #>3,x0
  1928.     move    a,x1
  1929.     jsr    <delf_div
  1930.     rnd    a    #>3,x0
  1931.     tfr    y0,a    a,x1
  1932.     rep    x1
  1933.     add    x0,a    a,x:(r7)+
  1934.     tfr    y0,a    #>1,b
  1935.     add    b,a
  1936.     rep    x1
  1937.     add    x0,a    a,x:(r7)+
  1938.     tfr    y0,a    #>2,b
  1939.     add    b,a    y1,y0
  1940.     rep    x1
  1941.     add    x0,a    a,x:(r7)+
  1942. init_ro1
  1943.  
  1944. ; ro2 - partial reordering  (blocktype==2 && mixedblock)
  1945.     move    r7,x:ro2_p
  1946.     move    x:ro1_p,r1
  1947.     move    #<36,n1
  1948.     clr    a    #>1,x0
  1949.     rep    #36
  1950.     add    x0,a    a,x:(r7)+
  1951.     move    (r1)+n1
  1952.     do    #576-36,init_ro2
  1953.     move    x:(r1)+,a
  1954.     move    a,x:(r7)+
  1955. init_ro2
  1956.  
  1957.     move    #<0,x0
  1958.     rts
  1959.  
  1960.  
  1961.  
  1962. synth_unscramble_help
  1963.     jmp    (r7)
  1964.     move    #synth_unscramble,r7
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.     org    x:
  1978.     align    1024
  1979. synth_audio
  1980.     ds    2048
  1981.  
  1982. ;->xdata+2048
  1983. inbuf
  1984.     ds    662    ;(33+512+1440)/3
  1985.  
  1986. ;->xdata+2710
  1987. quantab_p    ds    1    ;comes from main prog (see 'MP3_quantab.h')
  1988.  
  1989.  
  1990. ;    dc    "***xr0***"
  1991. xr0        ds    576
  1992. ;    dc    "***xr1***"
  1993.         dc    1,1,1    ;safety (for intensity-stereo)
  1994. xr1        ds    576
  1995. ;    dc    "***xr.***"
  1996. xr_p        ds    1
  1997.  
  1998.  
  1999.  
  2000. ;    dc    "***getbit***"
  2001. getbits_p        dc    getbits__
  2002. getbit1_p        dc    getbit1__
  2003. getbits_stream        ds    1
  2004. getbits_temp        ds    1
  2005. getbits_count        ds    1
  2006.  
  2007. mono            ds    1
  2008. channels        ds    1
  2009. modext            ds    1
  2010.  
  2011.  
  2012. sfsi_p        ds    1
  2013. granule0_sfsi    ds    4*2    ;always zero
  2014. ;    dc    "***sfsi01***"
  2015. granule1_sfsi    ds    4*2    ;4 values for each channel
  2016.  
  2017. si_granule_tab_p    ds    1
  2018. si_tab_p        ds    1
  2019. si_tab        dc    si0,si1,si2,si3
  2020.  
  2021. ;    dc    "***si0***"
  2022. si0
  2023. grstart        ds    1
  2024. grend        ds    1
  2025. regionend2    ds    1
  2026. globalgain    ds    1
  2027. sfcompress    ds    1
  2028. blocktype    ds    1
  2029. mixedblock    ds    1
  2030. tabsel0        ds    1
  2031. tabsel1        ds    1
  2032. tabsel2        ds    1
  2033. subblockgain0    ds    1
  2034. subblockgain1    ds    1
  2035. subblockgain2    ds    1
  2036. regionend0    ds    1
  2037. regionend1    ds    1
  2038. preflag        ds    1
  2039. sfshift        ds    1
  2040. tabsel3        ds    1
  2041. ;    dc    "***si1***"
  2042. si1        ds    18
  2043. ;    dc    "***si2***"
  2044. si2        ds    18
  2045. ;    dc    "***si3***"
  2046. si3        ds    18
  2047. ;    dc    "***si.***"
  2048.  
  2049. granule_counter    ds    1
  2050. channel_counter    ds    1
  2051.  
  2052. outbuf        ds    1
  2053.  
  2054. scalefac_p    ds    1
  2055. ;    dc    "***sf0***"
  2056. scalefac0    ds    39
  2057. ;    dc    "***sf1***"
  2058. scalefac1    ds    39
  2059. ;    dc    "***sf.***"
  2060.  
  2061.  
  2062. ro0_p        ds    1
  2063. ro1_p        ds    1
  2064. ro2_p        ds    1
  2065. prev_p        ds    1
  2066.  
  2067. synth_in_p        ds    1
  2068. synth_out_p        ds    1
  2069. ;    dc    "**synth**"
  2070. synth_audio_l_p        dc    synth_audio
  2071. synth_audio_r_p        dc    synth_audio+1024
  2072. synth_audio_pp        ds    1
  2073. synth_count18        ds    1
  2074.  
  2075. synth_imfct_p        dc    synth_imfct_slow
  2076. synth_window_p        dc    synth_window_start
  2077. synth_tab_rsincosx_p    dc    synth_tab_rsinxrcosx
  2078.  
  2079.  
  2080.  
  2081. ;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  2082. ;    dc    "***mbc***"
  2083. ;debug_mb_count    dc    0
  2084. ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  2085.  
  2086.  
  2087.  
  2088. htab00
  2089.  dc    0
  2090. htab01
  2091.  dc   -5,  -3,  -1,  17,   1,  16,   0
  2092. htab02
  2093.  dc  -15, -11,  -9,  -5,  -3,  -1,  34,   2,  18,  -1,  33,  32,  17,  -1,   1
  2094.  dc   16,   0
  2095. htab03
  2096.  dc  -13, -11,  -9,  -5,  -3,  -1,  34,   2,  18,  -1,  33,  32,  16,  17,  -1
  2097.  dc    1,   0
  2098. htab04
  2099.  dc    0
  2100. htab05
  2101.  dc  -29, -25, -23, -15,  -7,  -5,  -3,  -1,  51,  35,  50,  49,  -3,  -1,  19
  2102.  dc    3,  -1,  48,  34,  -3,  -1,  18,  33,  -1,   2,  32,  17,  -1,   1,  16
  2103.  dc    0
  2104. htab06
  2105.  dc  -25, -19, -13,  -9,  -5,  -3,  -1,  51,   3,  35,  -1,  50,  48,  -1,  19
  2106.  dc   49,  -3,  -1,  34,   2,  18,  -3,  -1,  33,  32,   1,  -1,  17,  -1,  16
  2107.  dc    0
  2108. htab07
  2109.  dc  -69, -65, -57, -39, -29, -17, -11,  -7,  -3,  -1,  85,  69,  -1,  84,  83
  2110.  dc   -1,  53,  68,  -3,  -1,  37,  82,  21,  -5,  -1,  81,  -1,   5,  52,  -1
  2111.  dc   80,  -1,  67,  51,  -5,  -3,  -1,  36,  66,  20,  -1,  65,  64, -11,  -7
  2112.  dc   -3,  -1,   4,  35,  -1,  50,   3,  -1,  19,  49,  -3,  -1,  48,  34,  18
  2113.  dc   -5,  -1,  33,  -1,   2,  32,  17,  -1,   1,  16,   0
  2114. htab08
  2115.  dc  -65, -63, -59, -45, -31, -19, -13,  -7,  -5,  -3,  -1,  85,  84,  69,  83
  2116.  dc   -3,  -1,  53,  68,  37,  -3,  -1,  82,   5,  21,  -5,  -1,  81,  -1,  52
  2117.  dc   67,  -3,  -1,  80,  51,  36,  -5,  -3,  -1,  66,  20,  65,  -3,  -1,   4
  2118.  dc   64,  -1,  35,  50,  -9,  -7,  -3,  -1,  19,  49,  -1,   3,  48,  34,  -1
  2119.  dc    2,  32,  -1,  18,  33,  17,  -3,  -1,   1,  16,   0
  2120. htab09
  2121.  dc  -63, -53, -41, -29, -19, -11,  -5,  -3,  -1,  85,  69,  53,  -1,  83,  -1
  2122.  dc   84,   5,  -3,  -1,  68,  37,  -1,  82,  21,  -3,  -1,  81,  52,  -1,  67
  2123.  dc   -1,  80,   4,  -7,  -3,  -1,  36,  66,  -1,  51,  64,  -1,  20,  65,  -5
  2124.  dc   -3,  -1,  35,  50,  19,  -1,  49,  -1,   3,  48,  -5,  -3,  -1,  34,   2
  2125.  dc   18,  -1,  33,  32,  -3,  -1,  17,   1,  -1,  16,   0
  2126. htab10
  2127.  dc -125,-121,-111, -83, -55, -35, -21, -13,  -7,  -3,  -1, 119, 103,  -1, 118
  2128.  dc   87,  -3,  -1, 117, 102,  71,  -3,  -1, 116,  86,  -1, 101,  55,  -9,  -3
  2129.  dc   -1, 115,  70,  -3,  -1,  85,  84,  99,  -1,  39, 114, -11,  -5,  -3,  -1
  2130.  dc  100,   7, 112,  -1,  98,  -1,  69,  53,  -5,  -1,   6,  -1,  83,  68,  23
  2131.  dc  -17,  -5,  -1, 113,  -1,  54,  38,  -5,  -3,  -1,  37,  82,  21,  -1,  81
  2132.  dc   -1,  52,  67,  -3,  -1,  22,  97,  -1,  96,  -1,   5,  80, -19, -11,  -7
  2133.  dc   -3,  -1,  36,  66,  -1,  51,   4,  -1,  20,  65,  -3,  -1,  64,  35,  -1
  2134.  dc   50,   3,  -3,  -1,  19,  49,  -1,  48,  34,  -7,  -3,  -1,  18,  33,  -1
  2135.  dc    2,  32,  17,  -1,   1,  16,   0
  2136. htab11
  2137.  dc -121,-113, -89, -59, -43, -27, -17,  -7,  -3,  -1, 119, 103,  -1, 118, 117
  2138.  dc   -3,  -1, 102,  71,  -1, 116,  -1,  87,  85,  -5,  -3,  -1,  86, 101,  55
  2139.  dc   -1, 115,  70,  -9,  -7,  -3,  -1,  69,  84,  -1,  53,  83,  39,  -1, 114
  2140.  dc   -1, 100,   7,  -5,  -1, 113,  -1,  23, 112,  -3,  -1,  54,  99,  -1,  96
  2141.  dc   -1,  68,  37, -13,  -7,  -5,  -3,  -1,  82,   5,  21,  98,  -3,  -1,  38
  2142.  dc    6,  22,  -5,  -1,  97,  -1,  81,  52,  -5,  -1,  80,  -1,  67,  51,  -1
  2143.  dc   36,  66, -15, -11,  -7,  -3,  -1,  20,  65,  -1,   4,  64,  -1,  35,  50
  2144.  dc   -1,  19,  49,  -5,  -3,  -1,   3,  48,  34,  33,  -5,  -1,  18,  -1,   2
  2145.  dc   32,  17,  -3,  -1,   1,  16,   0
  2146. htab12
  2147.  dc -115, -99, -73, -45, -27, -17,  -9,  -5,  -3,  -1, 119, 103, 118,  -1,  87
  2148.  dc  117,  -3,  -1, 102,  71,  -1, 116, 101,  -3,  -1,  86,  55,  -3,  -1, 115
  2149.  dc   85,  39,  -7,  -3,  -1, 114,  70,  -1, 100,  23,  -5,  -1, 113,  -1,   7
  2150.  dc  112,  -1,  54,  99, -13,  -9,  -3,  -1,  69,  84,  -1,  68,  -1,   6,   5
  2151.  dc   -1,  38,  98,  -5,  -1,  97,  -1,  22,  96,  -3,  -1,  53,  83,  -1,  37
  2152.  dc   82, -17,  -7,  -3,  -1,  21,  81,  -1,  52,  67,  -5,  -3,  -1,  80,   4
  2153.  dc   36,  -1,  66,  20,  -3,  -1,  51,  65,  -1,  35,  50, -11,  -7,  -5,  -3
  2154.  dc   -1,  64,   3,  48,  19,  -1,  49,  34,  -1,  18,  33,  -7,  -5,  -3,  -1
  2155.  dc    2,  32,   0,  17,  -1,   1,  16
  2156. htab13
  2157.  dc -509,-503,-475,-405,-333,-265,-205,-153,-115, -83, -53, -35, -21, -13,  -9
  2158.  dc   -7,  -5,  -3,  -1, 254, 252, 253, 237, 255,  -1, 239, 223,  -3,  -1, 238
  2159.  dc  207,  -1, 222, 191,  -9,  -3,  -1, 251, 206,  -1, 220,  -1, 175, 233,  -1
  2160.  dc  236, 221,  -9,  -5,  -3,  -1, 250, 205, 190,  -1, 235, 159,  -3,  -1, 249
  2161.  dc  234,  -1, 189, 219, -17,  -9,  -3,  -1, 143, 248,  -1, 204,  -1, 174, 158
  2162.  dc   -5,  -1, 142,  -1, 127, 126, 247,  -5,  -1, 218,  -1, 173, 188,  -3,  -1
  2163.  dc  203, 246, 111, -15,  -7,  -3,  -1, 232,  95,  -1, 157, 217,  -3,  -1, 245
  2164.  dc  231,  -1, 172, 187,  -9,  -3,  -1,  79, 244,  -3,  -1, 202, 230, 243,  -1
  2165.  dc   63,  -1, 141, 216, -21,  -9,  -3,  -1,  47, 242,  -3,  -1, 110, 156,  15
  2166.  dc   -5,  -3,  -1, 201,  94, 171,  -3,  -1, 125, 215,  78, -11,  -5,  -3,  -1
  2167.  dc  200, 214,  62,  -1, 185,  -1, 155, 170,  -1,  31, 241, -23, -13,  -5,  -1
  2168.  dc  240,  -1, 186, 229,  -3,  -1, 228, 140,  -1, 109, 227,  -5,  -1, 226,  -1
  2169.  dc   46,  14,  -1,  30, 225, -15,  -7,  -3,  -1, 224,  93,  -1, 213, 124,  -3
  2170.  dc   -1, 199,  77,  -1, 139, 184,  -7,  -3,  -1, 212, 154,  -1, 169, 108,  -1
  2171.  dc  198,  61, -37, -21,  -9,  -5,  -3,  -1, 211, 123,  45,  -1, 210,  29,  -5
  2172.  dc   -1, 183,  -1,  92, 197,  -3,  -1, 153, 122, 195,  -7,  -5,  -3,  -1, 167
  2173.  dc  151,  75, 209,  -3,  -1,  13, 208,  -1, 138, 168, -11,  -7,  -3,  -1,  76
  2174.  dc  196,  -1, 107, 182,  -1,  60,  44,  -3,  -1, 194,  91,  -3,  -1, 181, 137
  2175.  dc   28, -43, -23, -11,  -5,  -1, 193,  -1, 152,  12,  -1, 192,  -1, 180, 106
  2176.  dc   -5,  -3,  -1, 166, 121,  59,  -1, 179,  -1, 136,  90, -11,  -5,  -1,  43
  2177.  dc   -1, 165, 105,  -1, 164,  -1, 120, 135,  -5,  -1, 148,  -1, 119, 118, 178
  2178.  dc  -11,  -3,  -1,  27, 177,  -3,  -1,  11, 176,  -1, 150,  74,  -7,  -3,  -1
  2179.  dc   58, 163,  -1,  89, 149,  -1,  42, 162, -47, -23,  -9,  -3,  -1,  26, 161
  2180.  dc   -3,  -1,  10, 104, 160,  -5,  -3,  -1, 134,  73, 147,  -3,  -1,  57,  88
  2181.  dc   -1, 133, 103,  -9,  -3,  -1,  41, 146,  -3,  -1,  87, 117,  56,  -5,  -1
  2182.  dc  131,  -1, 102,  71,  -3,  -1, 116,  86,  -1, 101, 115, -11,  -3,  -1,  25
  2183.  dc  145,  -3,  -1,   9, 144,  -1,  72, 132,  -7,  -5,  -1, 114,  -1,  70, 100
  2184.  dc   40,  -1, 130,  24, -41, -27, -11,  -5,  -3,  -1,  55,  39,  23,  -1, 113
  2185.  dc   -1,  85,   7,  -7,  -3,  -1, 112,  54,  -1,  99,  69,  -3,  -1,  84,  38
  2186.  dc   -1,  98,  53,  -5,  -1, 129,  -1,   8, 128,  -3,  -1,  22,  97,  -1,   6
  2187.  dc   96, -13,  -9,  -5,  -3,  -1,  83,  68,  37,  -1,  82,   5,  -1,  21,  81
  2188.  dc   -7,  -3,  -1,  52,  67,  -1,  80,  36,  -3,  -1,  66,  51,  20, -19, -11
  2189.  dc   -5,  -1,  65,  -1,   4,  64,  -3,  -1,  35,  50,  19,  -3,  -1,  49,   3
  2190.  dc   -1,  48,  34,  -3,  -1,  18,  33,  -1,   2,  32,  -3,  -1,  17,   1,  16
  2191.  dc    0
  2192. htab14
  2193.  dc    0
  2194. htab15
  2195.  dc -495,-445,-355,-263,-183,-115, -77, -43, -27, -13,  -7,  -3,  -1, 255, 239
  2196.  dc   -1, 254, 223,  -1, 238,  -1, 253, 207,  -7,  -3,  -1, 252, 222,  -1, 237
  2197.  dc  191,  -1, 251,  -1, 206, 236,  -7,  -3,  -1, 221, 175,  -1, 250, 190,  -3
  2198.  dc   -1, 235, 205,  -1, 220, 159, -15,  -7,  -3,  -1, 249, 234,  -1, 189, 219
  2199.  dc   -3,  -1, 143, 248,  -1, 204, 158,  -7,  -3,  -1, 233, 127,  -1, 247, 173
  2200.  dc   -3,  -1, 218, 188,  -1, 111,  -1, 174,  15, -19, -11,  -3,  -1, 203, 246
  2201.  dc   -3,  -1, 142, 232,  -1,  95, 157,  -3,  -1, 245, 126,  -1, 231, 172,  -9
  2202.  dc   -3,  -1, 202, 187,  -3,  -1, 217, 141,  79,  -3,  -1, 244,  63,  -1, 243
  2203.  dc  216, -33, -17,  -9,  -3,  -1, 230,  47,  -1, 242,  -1, 110, 240,  -3,  -1
  2204.  dc   31, 241,  -1, 156, 201,  -7,  -3,  -1,  94, 171,  -1, 186, 229,  -3,  -1
  2205.  dc  125, 215,  -1,  78, 228, -15,  -7,  -3,  -1, 140, 200,  -1,  62, 109,  -3
  2206.  dc   -1, 214, 227,  -1, 155, 185,  -7,  -3,  -1,  46, 170,  -1, 226,  30,  -5
  2207.  dc   -1, 225,  -1,  14, 224,  -1,  93, 213, -45, -25, -13,  -7,  -3,  -1, 124
  2208.  dc  199,  -1,  77, 139,  -1, 212,  -1, 184, 154,  -7,  -3,  -1, 169, 108,  -1
  2209.  dc  198,  61,  -1, 211, 210,  -9,  -5,  -3,  -1,  45,  13,  29,  -1, 123, 183
  2210.  dc   -5,  -1, 209,  -1,  92, 208,  -1, 197, 138, -17,  -7,  -3,  -1, 168,  76
  2211.  dc   -1, 196, 107,  -5,  -1, 182,  -1, 153,  12,  -1,  60, 195,  -9,  -3,  -1
  2212.  dc  122, 167,  -1, 166,  -1, 192,  11,  -1, 194,  -1,  44,  91, -55, -29, -15
  2213.  dc   -7,  -3,  -1, 181,  28,  -1, 137, 152,  -3,  -1, 193,  75,  -1, 180, 106
  2214.  dc   -5,  -3,  -1,  59, 121, 179,  -3,  -1, 151, 136,  -1,  43,  90, -11,  -5
  2215.  dc   -1, 178,  -1, 165,  27,  -1, 177,  -1, 176, 105,  -7,  -3,  -1, 150,  74
  2216.  dc   -1, 164, 120,  -3,  -1, 135,  58, 163, -17,  -7,  -3,  -1,  89, 149,  -1
  2217.  dc   42, 162,  -3,  -1,  26, 161,  -3,  -1,  10, 160, 104,  -7,  -3,  -1, 134
  2218.  dc   73,  -1, 148,  57,  -5,  -1, 147,  -1, 119,   9,  -1,  88, 133, -53, -29
  2219.  dc  -13,  -7,  -3,  -1,  41, 103,  -1, 118, 146,  -1, 145,  -1,  25, 144,  -7
  2220.  dc   -3,  -1,  72, 132,  -1,  87, 117,  -3,  -1,  56, 131,  -1, 102,  71,  -7
  2221.  dc   -3,  -1,  40, 130,  -1,  24, 129,  -7,  -3,  -1, 116,   8,  -1, 128,  86
  2222.  dc   -3,  -1, 101,  55,  -1, 115,  70, -17,  -7,  -3,  -1,  39, 114,  -1, 100
  2223.  dc   23,  -3,  -1,  85, 113,  -3,  -1,   7, 112,  54,  -7,  -3,  -1,  99,  69
  2224.  dc   -1,  84,  38,  -3,  -1,  98,  22,  -3,  -1,   6,  96,  53, -33, -19,  -9
  2225.  dc   -5,  -1,  97,  -1,  83,  68,  -1,  37,  82,  -3,  -1,  21,  81,  -3,  -1
  2226.  dc    5,  80,  52,  -7,  -3,  -1,  67,  36,  -1,  66,  51,  -1,  65,  -1,  20
  2227.  dc    4,  -9,  -3,  -1,  35,  50,  -3,  -1,  64,   3,  19,  -3,  -1,  49,  48
  2228.  dc   34,  -9,  -7,  -3,  -1,  18,  33,  -1,   2,  32,  17,  -3,  -1,   1,  16
  2229.  dc    0
  2230. htab16
  2231.  dc -509,-503,-461,-323,-103, -37, -27, -15,  -7,  -3,  -1, 239, 254,  -1, 223
  2232.  dc  253,  -3,  -1, 207, 252,  -1, 191, 251,  -5,  -1, 175,  -1, 250, 159,  -3
  2233.  dc   -1, 249, 248, 143,  -7,  -3,  -1, 127, 247,  -1, 111, 246, 255,  -9,  -5
  2234.  dc   -3,  -1,  95, 245,  79,  -1, 244, 243, -53,  -1, 240,  -1,  63, -29, -19
  2235.  dc  -13,  -7,  -5,  -1, 206,  -1, 236, 221, 222,  -1, 233,  -1, 234, 217,  -1
  2236.  dc  238,  -1, 237, 235,  -3,  -1, 190, 205,  -3,  -1, 220, 219, 174, -11,  -5
  2237.  dc   -1, 204,  -1, 173, 218,  -3,  -1, 126, 172, 202,  -5,  -3,  -1, 201, 125
  2238.  dc   94, 189, 242, -93,  -5,  -3,  -1,  47,  15,  31,  -1, 241, -49, -25, -13
  2239.  dc   -5,  -1, 158,  -1, 188, 203,  -3,  -1, 142, 232,  -1, 157, 231,  -7,  -3
  2240.  dc   -1, 187, 141,  -1, 216, 110,  -1, 230, 156, -13,  -7,  -3,  -1, 171, 186
  2241.  dc   -1, 229, 215,  -1,  78,  -1, 228, 140,  -3,  -1, 200,  62,  -1, 109,  -1
  2242.  dc  214, 155, -19, -11,  -5,  -3,  -1, 185, 170, 225,  -1, 212,  -1, 184, 169
  2243.  dc   -5,  -1, 123,  -1, 183, 208, 227,  -7,  -3,  -1,  14, 224,  -1,  93, 213
  2244.  dc   -3,  -1, 124, 199,  -1,  77, 139, -75, -45, -27, -13,  -7,  -3,  -1, 154
  2245.  dc  108,  -1, 198,  61,  -3,  -1,  92, 197,  13,  -7,  -3,  -1, 138, 168,  -1
  2246.  dc  153,  76,  -3,  -1, 182, 122,  60, -11,  -5,  -3,  -1,  91, 137,  28,  -1
  2247.  dc  192,  -1, 152, 121,  -1, 226,  -1,  46,  30, -15,  -7,  -3,  -1, 211,  45
  2248.  dc   -1, 210, 209,  -5,  -1,  59,  -1, 151, 136,  29,  -7,  -3,  -1, 196, 107
  2249.  dc   -1, 195, 167,  -1,  44,  -1, 194, 181, -23, -13,  -7,  -3,  -1, 193,  12
  2250.  dc   -1,  75, 180,  -3,  -1, 106, 166, 179,  -5,  -3,  -1,  90, 165,  43,  -1
  2251.  dc  178,  27, -13,  -5,  -1, 177,  -1,  11, 176,  -3,  -1, 105, 150,  -1,  74
  2252.  dc  164,  -5,  -3,  -1, 120, 135, 163,  -3,  -1,  58,  89,  42, -97, -57, -33
  2253.  dc  -19, -11,  -5,  -3,  -1, 149, 104, 161,  -3,  -1, 134, 119, 148,  -5,  -3
  2254.  dc   -1,  73,  87, 103, 162,  -5,  -1,  26,  -1,  10, 160,  -3,  -1,  57, 147
  2255.  dc   -1,  88, 133,  -9,  -3,  -1,  41, 146,  -3,  -1, 118,   9,  25,  -5,  -1
  2256.  dc  145,  -1, 144,  72,  -3,  -1, 132, 117,  -1,  56, 131, -21, -11,  -5,  -3
  2257.  dc   -1, 102,  40, 130,  -3,  -1,  71, 116,  24,  -3,  -1, 129, 128,  -3,  -1
  2258.  dc    8,  86,  55,  -9,  -5,  -1, 115,  -1, 101,  70,  -1,  39, 114,  -5,  -3
  2259.  dc   -1, 100,  85,   7,  23, -23, -13,  -5,  -1, 113,  -1, 112,  54,  -3,  -1
  2260.  dc   99,  69,  -1,  84,  38,  -3,  -1,  98,  22,  -1,  97,  -1,   6,  96,  -9
  2261.  dc   -5,  -1,  83,  -1,  53,  68,  -1,  37,  82,  -1,  81,  -1,  21,   5, -33
  2262.  dc  -23, -13,  -7,  -3,  -1,  52,  67,  -1,  80,  36,  -3,  -1,  66,  51,  20
  2263.  dc   -5,  -1,  65,  -1,   4,  64,  -1,  35,  50,  -3,  -1,  19,  49,  -3,  -1
  2264.  dc    3,  48,  34,  -3,  -1,  18,  33,  -1,   2,  32,  -3,  -1,  17,   1,  16
  2265.  dc    0
  2266. htab24
  2267.  dc -451,-117, -43, -25, -15,  -7,  -3,  -1, 239, 254,  -1, 223, 253,  -3,  -1
  2268.  dc  207, 252,  -1, 191, 251,  -5,  -1, 250,  -1, 175, 159,  -1, 249, 248,  -9
  2269.  dc   -5,  -3,  -1, 143, 127, 247,  -1, 111, 246,  -3,  -1,  95, 245,  -1,  79
  2270.  dc  244, -71,  -7,  -3,  -1,  63, 243,  -1,  47, 242,  -5,  -1, 241,  -1,  31
  2271.  dc  240, -25,  -9,  -1,  15,  -3,  -1, 238, 222,  -1, 237, 206,  -7,  -3,  -1
  2272.  dc  236, 221,  -1, 190, 235,  -3,  -1, 205, 220,  -1, 174, 234, -15,  -7,  -3
  2273.  dc   -1, 189, 219,  -1, 204, 158,  -3,  -1, 233, 173,  -1, 218, 188,  -7,  -3
  2274.  dc   -1, 203, 142,  -1, 232, 157,  -3,  -1, 217, 126,  -1, 231, 172, 255,-235
  2275.  dc -143, -77, -45, -25, -15,  -7,  -3,  -1, 202, 187,  -1, 141, 216,  -5,  -3
  2276.  dc   -1,  14, 224,  13, 230,  -5,  -3,  -1, 110, 156, 201,  -1,  94, 186,  -9
  2277.  dc   -5,  -1, 229,  -1, 171, 125,  -1, 215, 228,  -3,  -1, 140, 200,  -3,  -1
  2278.  dc   78,  46,  62, -15,  -7,  -3,  -1, 109, 214,  -1, 227, 155,  -3,  -1, 185
  2279.  dc  170,  -1, 226,  30,  -7,  -3,  -1, 225,  93,  -1, 213, 124,  -3,  -1, 199
  2280.  dc   77,  -1, 139, 184, -31, -15,  -7,  -3,  -1, 212, 154,  -1, 169, 108,  -3
  2281.  dc   -1, 198,  61,  -1, 211,  45,  -7,  -3,  -1, 210,  29,  -1, 123, 183,  -3
  2282.  dc   -1, 209,  92,  -1, 197, 138, -17,  -7,  -3,  -1, 168, 153,  -1,  76, 196
  2283.  dc   -3,  -1, 107, 182,  -3,  -1, 208,  12,  60,  -7,  -3,  -1, 195, 122,  -1
  2284.  dc  167,  44,  -3,  -1, 194,  91,  -1, 181,  28, -57, -35, -19,  -7,  -3,  -1
  2285.  dc  137, 152,  -1, 193,  75,  -5,  -3,  -1, 192,  11,  59,  -3,  -1, 176,  10
  2286.  dc   26,  -5,  -1, 180,  -1, 106, 166,  -3,  -1, 121, 151,  -3,  -1, 160,   9
  2287.  dc  144,  -9,  -3,  -1, 179, 136,  -3,  -1,  43,  90, 178,  -7,  -3,  -1, 165
  2288.  dc   27,  -1, 177, 105,  -1, 150, 164, -17,  -9,  -5,  -3,  -1,  74, 120, 135
  2289.  dc   -1,  58, 163,  -3,  -1,  89, 149,  -1,  42, 162,  -7,  -3,  -1, 161, 104
  2290.  dc   -1, 134, 119,  -3,  -1,  73, 148,  -1,  57, 147, -63, -31, -15,  -7,  -3
  2291.  dc   -1,  88, 133,  -1,  41, 103,  -3,  -1, 118, 146,  -1,  25, 145,  -7,  -3
  2292.  dc   -1,  72, 132,  -1,  87, 117,  -3,  -1,  56, 131,  -1, 102,  40, -17,  -7
  2293.  dc   -3,  -1, 130,  24,  -1,  71, 116,  -5,  -1, 129,  -1,   8, 128,  -1,  86
  2294.  dc  101,  -7,  -5,  -1,  23,  -1,   7, 112, 115,  -3,  -1,  55,  39, 114, -15
  2295.  dc   -7,  -3,  -1,  70, 100,  -1,  85, 113,  -3,  -1,  54,  99,  -1,  69,  84
  2296.  dc   -7,  -3,  -1,  38,  98,  -1,  22,  97,  -5,  -3,  -1,   6,  96,  53,  -1
  2297.  dc   83,  68, -51, -37, -23, -15,  -9,  -3,  -1,  37,  82,  -1,  21,  -1,   5
  2298.  dc   80,  -1,  81,  -1,  52,  67,  -3,  -1,  36,  66,  -1,  51,  20,  -9,  -5
  2299.  dc   -1,  65,  -1,   4,  64,  -1,  35,  50,  -1,  19,  49,  -7,  -5,  -3,  -1
  2300.  dc    3,  48,  34,  18,  -1,  33,  -1,   2,  32,  -3,  -1,  17,   1,  -1,  16
  2301.  dc    0
  2302. htaba
  2303.  dc  -29, -21, -13,  -7,  -3,  -1,  11,  15,  -1,  13,  14,  -3,  -1,   7,   5
  2304.  dc    9,  -3,  -1,   6,   3,  -1,  10,  12,  -3,  -1,   2,   1,  -1,   4,   8
  2305.  dc    0
  2306. htabb
  2307.  dc  -15,  -7,  -3,  -1,  15,  14,  -1,  13,  12,  -3,  -1,  11,  10,  -1,   9
  2308.  dc    8,  -7,  -3,  -1,   7,   6,  -1,   5,   4,  -3,  -1,   3,   2,  -1,   1
  2309.  dc    0
  2310. htablinbits
  2311.  dc 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,6,8,10,13,4,5,6,7,8,9,11,13,0,0
  2312. htabs
  2313.  dc htab00,htab01,htab02,htab03,htab04,htab05,htab06,htab07,htab08,htab09
  2314.  dc htab10,htab11,htab12,htab13,htab14,htab15,htab16,htab16,htab16,htab16
  2315.  dc htab16,htab16,htab16,htab16,htab24,htab24,htab24,htab24,htab24,htab24
  2316.  dc htab24,htab24,htaba,htabb
  2317.  
  2318.  
  2319. sfbands_p
  2320.     ds    1
  2321. sfbands_tab
  2322.     dc    sfbands_44100,sfbands_48000,sfbands_32000
  2323. sfbands_44100
  2324.  dc 0,12,24,36,48,66,90,120,156,198,252,318,408,576
  2325. sfbands_48000
  2326.  dc 0,12,24,36,48,66,84,114,150,192,240,300,378,576
  2327. sfbands_32000
  2328.  dc 0,12,24,36,48,66,90,126,174,234,312,414,540,576
  2329. sfbandl_p
  2330.     ds    1
  2331. sfbandl_tab
  2332.     dc    sfbandl_44100,sfbandl_48000,sfbandl_32000
  2333. sfbandl_44100
  2334.  dc 0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576
  2335. sfbandl_48000
  2336.  dc 0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576
  2337. sfbandl_32000
  2338.  dc 0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576
  2339.  
  2340. pretab
  2341.  dc 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0
  2342.  
  2343.  
  2344. sfbtab0        dc    0,6,11,16,21
  2345. sfbtab1        dc    0,9,18,24,36
  2346. sfbtab2        dc    0,8,17,23,35
  2347.  
  2348. cs_ca_tab_p    dc    cs_ca_tab
  2349.  
  2350. imdct_windows
  2351. ;win_type=0  NORMAL_WINDOW
  2352.  dc $059552,$10b515,$1bb44b,$267d87,$30fbc5,$3b1a94,$44c63c,$4debe5,$5679bd
  2353.  dc $5e5f1b,$658c9a,$6bf440,$718992,$7641af,$7a1366,$7cf744,$7ee7aa,$7fe0d0
  2354.  dc $7fe0d0,$7ee7aa,$7cf744,$7a1366,$7641af,$718992,$6bf440,$658c9a,$5e5f1b
  2355.  dc $5679bd,$4debe5,$44c63c,$3b1a94,$30fbc5,$267d87,$1bb44b,$10b515,$059552
  2356. ;win_type=1  START_WINDOW
  2357.  dc $059552,$10b515,$1bb44b,$267d87,$30fbc5,$3b1a94,$44c63c,$4debe5,$5679bd
  2358.  dc $5e5f1b,$658c9a,$6bf440,$718992,$7641af,$7a1366,$7cf744,$7ee7aa,$7fe0d0
  2359.  dc $7fffff,$7fffff,$7fffff,$7fffff,$7fffff,$7fffff,$7ee7aa,$7641af,$658c9a
  2360.  dc $4debe5,$30fbc5,$10b515,$000000,$000000,$000000,$000000,$000000,$000000
  2361. ;win_type=2 -> useless, because this case is done by short block imdct code.
  2362. ; ds 36
  2363.  
  2364. slentab0    dc    0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4
  2365. slentab1    dc    0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3
  2366. newslen        ds    4
  2367.  
  2368. ;win_type=3  STOP_WINDOW
  2369.  dc $000000,$000000,$000000,$000000,$000000,$000000,$10b515,$30fbc5,$4debe5
  2370.  dc $658c9a,$7641af,$7ee7aa,$7fffff,$7fffff,$7fffff,$7fffff,$7fffff,$7fffff
  2371.  dc $7fe0d0,$7ee7aa,$7cf744,$7a1366,$7641af,$718992,$6bf440,$658c9a,$5e5f1b
  2372.  dc $5679bd,$4debe5,$44c63c,$3b1a94,$30fbc5,$267d87,$1bb44b,$10b515,$059552
  2373.  
  2374.  
  2375. imdct_l_tab
  2376. ;coefficients for long blocks imdct
  2377. ;they are stored in order of use, so do not change their order !
  2378. ;lots of them are divided by two in order to use fixed point representation
  2379.  
  2380. ;9 points idct on even indices and twiddle factors,
  2381. ;or butterflies for 36 points idct
  2382. ; all factors are/2
  2383. ;;; dc    $7fffff            ;2/2 = 1 ~ 0.999999 = $7fffff
  2384.  dc    1.8793852415718/2
  2385.  dc    1.532088886238/2
  2386.  dc    0.5
  2387.  dc    0.34729635533386/2
  2388.  dc    1.9696155060244/2    ;tmp0_
  2389.  dc    1.732050808/2
  2390.  dc    1.2855752193731/2
  2391.  dc    0.68404028665134/2
  2392. ;;; dc    $7fffff            ;tmp1
  2393. ;;; dc    0.5
  2394. ;;; dc    -0.5
  2395. ;;; dc    $800000            ;-1
  2396. ;;; dc    -0.5
  2397.  dc    1.732050808/2        ;tmp1_
  2398. ;;; dc    0
  2399. ;;; dc    -1.732050808/2
  2400. ;;; dc    -1.732050808/2
  2401. ;;; dc    $7fffff            ;tmp2
  2402.  dc    -0.34729635533386/2
  2403.  dc    -1.8793852415718/2
  2404. ;;; dc    0.5
  2405.  dc    1.532088886238/2
  2406.  dc    1.2855752193731/2    ;tmp2_
  2407.  dc    -1.732050808/2
  2408.  dc    -0.68404028665134/2
  2409.  dc    1.9696155060244/2
  2410. ;;; dc    $7fffff            ;tmp3
  2411.  dc    -1.532088886238/2
  2412.  dc    0.34729635533386/2
  2413. ;;; dc    0.5
  2414.  dc    -1.8793852415718/2
  2415.  dc    0.68404028665134/2    ;tmp3_
  2416.  dc    -1.732050808/2
  2417.  dc    1.9696155060244/2
  2418.  dc    -1.2855752193731/2
  2419. ;9 points idct on odd indices and twiddle factors,
  2420. ;or butterflies for 36 points idct
  2421. ; all factors are/2 except some o factors /8 or not divided.
  2422. ;;; dc    $7fffff            ;tmp0o
  2423.  dc    1.8793852415718/2
  2424.  dc    1.532088886238/2
  2425. ;;; dc    0.5
  2426.  dc    0.34729635533386/2
  2427.  dc    1.9696155060244/2    ;tmp0_o
  2428.  dc    1.732050808/2
  2429.  dc    1.2855752193731/2
  2430.  dc    0.68404028665134/2
  2431.  dc    0.501909918         ;o0 factor
  2432.  dc    5.736856623/8        ;o7 factor
  2433. ;;; dc    $7fffff            ;tmp1o
  2434. ;;; dc    0.5
  2435. ;;; dc    -0.5
  2436. ;;; dc    $800000
  2437. ;;; dc    -0.5
  2438.  dc    1.732050808/2        ;tmp1_o
  2439. ;;; dc    0
  2440. ;;; dc    -1.732050808/2
  2441. ;;; dc    -1.732050808/2
  2442.  dc    0.517638090        ;o1 factor
  2443.  dc    1.931851653/2        ;o6 factor
  2444. ;;; dc    $7fffff            ;tmp2o
  2445.  dc    -0.34729635533386/2
  2446.  dc    -1.8793852415718/2
  2447. ;;; dc    0.5
  2448.  dc    1.532088886238/2
  2449.  dc    1.2855752193731/2    ;tmp2_o
  2450.  dc    -1.732050808/2
  2451.  dc    -0.68404028665134/2
  2452.  dc    1.9696155060244/2
  2453.  dc    0.551688959        ;o2 factor
  2454.  dc    1.183100792/2        ;o5 factor
  2455. ;;; dc    $7fffff            ;tmp3o
  2456.  dc    -1.532088886238/2
  2457.  dc    0.34729635533386/2
  2458. ;;; dc    0.5
  2459.  dc    -1.8793852415718/2
  2460.  dc    0.68404028665134/2    ;tmp3_o
  2461.  dc    -1.732050808/2
  2462.  dc    1.9696155060244/2
  2463.  dc    -1.2855752193731/2
  2464.  dc    0.610387294        ;o3 factor
  2465.  dc    0.871723397        ;o4 factor
  2466.  dc    0.707106781/2        ;tmp4o + twiddle factor
  2467. ;;; dc    -0.707106781/2
  2468. ;;; dc    0.707106781/2
  2469. ;;; dc    -0.707106781/2
  2470. ;;; dc    0.707106781/2
  2471. ;factors for final tmp computation
  2472. imdct_l_tab2_p    dc    imdct_l_tab2
  2473. imdct_l_tab2
  2474.  dc    -0.250238171
  2475.  dc    -0.25215724
  2476.  dc    -0.2560698785
  2477.  dc    -0.262132281
  2478.  dc    -0.541196100 
  2479.  dc    -0.2818454865
  2480.  dc    -0.2964222615
  2481.  dc    -0.3151181035
  2482.  dc    -0.339085426
  2483.  dc    -0.370046808
  2484.  dc    -0.4106699075
  2485.  dc    -0.465289749
  2486.  dc    -0.5414201425
  2487.  dc    -1.306562965/2
  2488.  dc    -0.831377381
  2489.  dc    -1.155056579/2
  2490.  dc    -1.915324394/2
  2491.  dc    -5.731396405/8
  2492.  
  2493.  
  2494. imdct_s_tab
  2495. ;coefficients for short blocks imdct
  2496. ;they are stored in order of use, so do not change their order !
  2497. ;some of them are divided by two in order to use fixed point representation
  2498.  
  2499. ;3 points idct/6 points idct+twiddle factors for odd indices
  2500.  dc    0.866025403,0.5    ;for tmp0 and tmp5
  2501. ;;; dc    0.866025403,0.5
  2502.  dc    0.517638090        ;twiddle factor for tmp5
  2503. ;;; dc    0,$800000    ;for tmp1 and tmp4
  2504. ;;; dc    0,$800000
  2505.  dc    0.707106781        ;twiddle factor for tmp4
  2506.  dc    0.5
  2507. ;;; dc    -0.866025403,0.5 ;for tmp2 and tmp3
  2508. ;;; dc    -0.866025403,0.5
  2509.  dc    1.931851653/2        ;twiddle factor/2 for tmp3
  2510. ;12 points twiddle/shifting to imdct/windowing factors
  2511. imdct_s_tab2_p    dc    imdct_s_tab2
  2512. imdct_s_tab2
  2513.  dc    0.1072063584        ;first imdct point=out[6]
  2514.  dc    0.4999999996
  2515.  dc    2.33195123/4        ;/4
  2516.  dc    -3.03905801/4        ;/4
  2517.  dc    -1.207106781/2        ;/2
  2518.  dc    -0.8143131387
  2519.  dc    -0.6248444486
  2520.  dc    -0.4999999996
  2521.  dc    -0.4000995771
  2522.  dc    -0.3070072035
  2523.  dc    -0.2071067809
  2524.  dc    -0.08226233216
  2525.  
  2526.  
  2527.  
  2528.  
  2529.  
  2530.  
  2531.  
  2532.     org    y:
  2533.  
  2534.     align    16
  2535. cs_ca_tab
  2536.  dc  0.857492925712, -0.5144957554270
  2537.  dc  0.881741997318, -0.4717319685650
  2538.  dc  0.949628649103, -0.3133774542040
  2539.  dc  0.983314592492, -0.1819131996110
  2540.  dc  0.995517816065, -0.0945741925262
  2541.  dc  0.999160558175, -0.0409655828852
  2542.  dc  0.999899195243, -0.0141985685725
  2543.  dc  0.999993155067, -0.0036999746738
  2544.  
  2545. ;->ydata+16
  2546. busy    dc    0
  2547.  
  2548. ;->ydata+17
  2549. forcemono
  2550.     dc    0
  2551.  
  2552. ;->ydata+18
  2553. pow43tab
  2554.     ds    8206        ;comes from main prog (see 'MP3_pow43tab.h')
  2555.  
  2556. ;    dc    "**prev0**"
  2557. hybrid_prev0        ds    576
  2558. ;    dc    "**prev1**"
  2559. hybrid_prev1        ds    576
  2560. ;    dc    "**prev.**"
  2561.  
  2562.  
  2563. synth_tab_window
  2564.  dc $000000,$fff8c1,$003540,$ff8d41,$01fd40,$faf7c1,$066b80,$db63c1
  2565.  dc $494780,$249c40,$066b80,$050840,$01fd40,$0072c0,$003540,$000740
  2566.  dc $ffffc1,$fff841,$003680,$ff7e41,$01f400,$fa9cc1,$05d1c0,$d99601
  2567.  dc $493c00,$22ce00,$06f780,$04ad00,$0203c0,$006440,$003400,$000680
  2568.  dc $ffffc1,$fff741,$003780,$ff6ec1,$01e800,$fa4241,$052a00,$d7ca01
  2569.  dc $491a00,$20ffc0,$077600,$045240,$020800,$0056c0,$003280,$000600
  2570.  dc $ffffc1,$fff681,$003840,$ff5ec1,$01d940,$f9e8c1,$047440,$d60081
  2571.  dc $48e180,$1f32c0,$07e700,$03f7c0,$0209c0,$004980,$003100,$000540
  2572.  dc $ffffc1,$fff5c1,$0038c0,$ff4e41,$01c780,$f990c1,$03b000,$d43ac1
  2573.  dc $489240,$1d6800,$084b00,$039e40,$020940,$003d00,$002f80,$0004c0
  2574.  dc $ffffc1,$fff4c1,$003900,$ff3d41,$01b2c0,$f93a41,$02ddc0,$d279c1
  2575.  dc $482d00,$1ba040,$08a200,$0345c0,$0206c0,$003140,$002dc0,$000440
  2576.  dc $ffffc1,$fff3c1,$003900,$ff2c01,$019b00,$f8e641,$01fd40,$d0be81
  2577.  dc $47b1c0,$19dc80,$08ecc0,$02ef00,$020240,$002640,$002c00,$000400
  2578.  dc $ffff81,$fff2c1,$0038c0,$ff1a41,$017fc0,$f894c1,$010e80,$cf09c1
  2579.  dc $4720c0,$181d80,$092b40,$0299c0,$01fc00,$001bc0,$002a40,$000380
  2580.  dc $ffff81,$fff181,$003800,$ff0841,$016180,$f84681,$001180,$cd5cc1
  2581.  dc $467a40,$166440,$095e00,$024680,$01f440,$001200,$002840,$000340
  2582.  dc $ffff81,$fff041,$003740,$fef601,$014000,$f7fbc1,$ff0681,$cbb881
  2583.  dc $45bf00,$14b140,$098580,$01f580,$01ea80,$000900,$002680,$0002c0
  2584.  dc $ffff81,$ffef01,$0035c0,$fee3c1,$011ac0,$f7b541,$fded81,$ca1d81
  2585.  dc $44ef80,$130580,$09a1c0,$01a700,$01dfc0,$000080,$0024c0,$000280
  2586.  dc $ffff41,$ffedc1,$003400,$fed181,$00f280,$f77341,$fcc701,$c88d81
  2587.  dc $440bc0,$1161c0,$09b3c0,$015b00,$01d380,$fff8c1,$0022c0,$000240
  2588.  dc $ffff41,$ffec41,$003200,$febf41,$00c680,$f73681,$fb92c1,$c708c1
  2589.  dc $431500,$0fc6c0,$09bb80,$0111c0,$01c640,$fff1c1,$002100,$000200
  2590.  dc $ffff01,$ffeac1,$002f40,$fead01,$009740,$f6ff41,$fa5181,$c59081
  2591.  dc $420b40,$0e3500,$09b9c0,$00cb80,$01b7c0,$ffeb41,$001f40,$0001c0
  2592.  dc $ffff01,$ffe941,$002c40,$fe9b01,$006480,$f6ce01,$f90381,$c425c1
  2593.  dc $40ef80,$0cad00,$09af00,$008840,$01a880,$ffe581,$001d40,$0001c0
  2594.  dc $fffec1,$ffe7c1,$0028c0,$fe8981,$002e40,$f6a3c1,$f7a901,$c2c901
  2595.  dc $3fc280,$0b2fc0,$099b80,$004800,$019880,$ffe041,$001bc0,$000180
  2596.  dc $fffec1,$ffe601,$002480,$fe7841,$fff4c1,$f68041,$f64241,$c17b41
  2597.  dc $3e84c0,$09bdc0,$097fc0,$000b40,$0187c0,$ffdb81,$001a00,$000140
  2598.  dc $fffe81,$ffe441,$001fc0,$fe6781,$ffb801,$f66481,$f4d041,$c03d81
  2599.  dc $3d3700,$085700,$095c40,$ffd1c1,$017680,$ffd741,$001840,$000140
  2600.  dc $fffe41,$ffe2c1,$001a80,$fe5781,$ff77c1,$f65101,$f35301,$bf1081
  2601.  dc $3bda40,$06fc80,$093200,$ff9b81,$016500,$ffd3c1,$0016c0,$000100
  2602.  dc $fffe41,$ffe0c1,$0014c0,$fe4841,$ff3481,$f64641,$f1cb01,$bdf4c1
  2603.  dc $3a6f80,$05ae80,$0900c0,$ff68c1,$015300,$ffd0c1,$001540,$000100
  2604.  dc $fffe01,$ffdf01,$000e40,$fe39c1,$feee41,$f64481,$f03941,$bceb01
  2605.  dc $38f740,$046d40,$08c980,$ff3981,$0140c0,$ffce01,$0013c0,$0000c0
  2606.  dc $fffdc1,$ffdd41,$000740,$fe2c81,$fea501,$f64c41,$ee9e41,$bbf441
  2607.  dc $377280,$033900,$088cc0,$ff0d81,$012e80,$ffcc01,$001240,$0000c0
  2608.  dc $fffd81,$ffdb41,$ffff81,$fe2041,$fe5901,$f65e41,$ecfa81,$bb1081
  2609.  dc $35e280,$021280,$084ac0,$fee541,$011c40,$ffca41,$001100,$000080
  2610.  dc $fffd41,$ffd981,$fff701,$fe1581,$fe0a81,$f67a81,$eb4ec1,$ba4101
  2611.  dc $344780,$00f980,$080440,$fec001,$010a00,$ffc8c1,$000fc0,$000080
  2612.  dc $fffcc1,$ffd7c1,$ffee01,$fe0bc1,$fdb981,$f6a201,$e99bc1,$b985c1
  2613.  dc $32a340,$ffee81,$07b980,$fe9e81,$00f7c0,$ffc801,$000e80,$000080
  2614.  dc $fffc81,$ffd5c1,$ffe441,$fe0401,$fd6641,$f6d4c1,$e7e281,$b8df41
  2615.  dc $30f640,$fef181,$076b40,$fe8041,$00e5c0,$ffc741,$000d40,$000080
  2616.  dc $fffc01,$ffd401,$ffd9c1,$fdfdc1,$fd1101,$f71341,$e62381,$b84e41
  2617.  dc $2f4180,$fe02c1,$0719c0,$fe6501,$00d400,$ffc701,$000c40,$000040
  2618.  dc $fffbc1,$ffd241,$ffcec1,$fdf941,$fcba41,$f75e01,$e45fc1,$b7d301
  2619.  dc $2d8640,$fd2241,$06c5c0,$fe4d41,$00c2c0,$ffc701,$000b40,$000040
  2620.  dc $fffb41,$ffd081,$ffc301,$fdf6c1,$fc61c1,$f7b501,$e29801,$b76dc1
  2621.  dc $2bc540,$fc5001,$066f40,$fe3881,$00b1c0,$ffc741,$000a40,$000040
  2622.  dc $fffac1,$ffcf01,$ffb681,$fdf641,$fc0841,$f81901,$e0cd41,$b71e81
  2623.  dc $29ff80,$fb8bc1,$061740,$fe26c1,$00a140,$ffc7c1,$000980,$000040
  2624.  dc $fffa01,$ffcd81,$ffa941,$fdf801,$fbadc1,$f88a01,$df0041,$b6e601
  2625.  dc $283600,$fad601,$05bdc0,$fe1801,$009140,$ffc881,$0008c0,$000040
  2626.  dc $fff981,$ffcc01,$ff9bc1,$fdfc41,$fb5301,$f90881,$dd3201,$b6c401
  2627.  dc $266a00,$fa2e41,$056340,$fe0c01,$0081c0,$ffc981,$0007c0,$000040
  2628. synth_tab_sinx
  2629.  dc  0.000000, 0.049068, 0.098017, 0.146730    ;sine only
  2630.  dc  0.195090, 0.242980, 0.290285, 0.336890
  2631.  dc  0.382683, 0.427555, 0.471397, 0.514103
  2632.  dc  0.555570, 0.595699, 0.634393, 0.671559
  2633.  dc  0.707107, 0.740951, 0.773010, 0.803208
  2634.  dc  0.831470, 0.857729, 0.881921, 0.903989
  2635.  dc  0.923880, 0.941544, 0.956940, 0.970031
  2636.  dc  0.980785, 0.989177, 0.995185, 0.998795
  2637. synth_tab_cosx
  2638.  dc  0.999999, 0.998795, 0.995185, 0.989177    ;sine and cosine
  2639.  dc  0.980785, 0.970031, 0.956940, 0.941544
  2640.  dc  0.923880, 0.903989, 0.881921, 0.857729
  2641.  dc  0.831470, 0.803208, 0.773010, 0.740951
  2642.  dc  0.707107, 0.671559, 0.634393, 0.595699
  2643.  dc  0.555570, 0.514103, 0.471397, 0.427555
  2644.  dc  0.382683, 0.336890, 0.290285, 0.242980
  2645.  dc  0.195090, 0.146730, 0.098017, 0.049068
  2646.  dc  0.000000,-0.049068,-0.098017,-0.146730    ;cosine only
  2647.  dc -0.195090,-0.242980,-0.290285,-0.336890
  2648.  dc -0.382683,-0.427555,-0.471397,-0.514103
  2649.  dc -0.555570,-0.595699,-0.634393,-0.671559
  2650.  dc -0.707107,-0.740951,-0.773010,-0.803208
  2651.  dc -0.831470,-0.857729,-0.881921,-0.903989
  2652.  dc -0.923880,-0.941544,-0.956940,-0.970031
  2653.  dc -0.980785,-0.989177,-0.995185,-0.998795
  2654.  
  2655.  
  2656.  
  2657.  
  2658.  
  2659.  
  2660.  
  2661.  
  2662.  
  2663.     org    l:
  2664.     align    64
  2665. synth_imfct_slow
  2666.     ds    64
  2667.  
  2668. synth_tab_rsinxrcosx
  2669. ;    **    x:rsinx        y:rcosx
  2670.     dcl    0.000000,     0.999999
  2671.     dcl    0.999999,     0.000000
  2672.     dcl    0.707107,     0.707107
  2673.     dcl    0.707107,    -0.707107
  2674.     dcl    0.382683,     0.923880
  2675.     dcl    0.923880,    -0.382683
  2676.     dcl    0.923880,     0.382683
  2677.     dcl    0.382683,    -0.923880
  2678.     dcl    0.195090,     0.980785
  2679.     dcl    0.980785,    -0.195090
  2680.     dcl    0.831470,     0.555570
  2681.     dcl    0.555570,    -0.831470
  2682.     dcl    0.555570,     0.831470
  2683.     dcl    0.831470,    -0.555570
  2684.     dcl    0.980785,     0.195090
  2685.     dcl    0.195090,    -0.980785
  2686.     dcl    0.098017,     0.995185
  2687.     dcl    0.995185,    -0.098017
  2688.     dcl    0.773010,     0.634393
  2689.     dcl    0.634393,    -0.773010
  2690.     dcl    0.471397,     0.881921
  2691.     dcl    0.881921,    -0.471397
  2692.     dcl    0.956940,     0.290285
  2693.     dcl    0.290285,    -0.956940
  2694.     dcl    0.290285,     0.956940
  2695.     dcl    0.956940,    -0.290285
  2696.     dcl    0.881921,     0.471397
  2697.     dcl    0.471397,    -0.881921
  2698.     dcl    0.634393,     0.773010
  2699.     dcl    0.773010,    -0.634393
  2700.     dcl    0.995185,     0.098017
  2701.     dcl    0.098017,    -0.995185
  2702.  
  2703. ;ktab
  2704. ;    dcl     0.0000000/4,     1.0000000/4
  2705. ;    dcl     0.2113249/4,     0.7886751/4
  2706. ;    dcl     0.3660254/4,     0.6339746/4
  2707. ;    dcl     0.5000000/4,     0.5000000/4
  2708. ;    dcl     0.6339746/4,     0.3660254/4
  2709. ;    dcl     0.7886751/4,     0.2113249/4
  2710. ;    dcl     1.0000000/4,     0.0000000/4
  2711. ;    dcl     1.3660254/4,    -0.3660254/4    ;ispos==7
  2712. ;    dcl     2.3660254/4,    -1.3660254/4
  2713. ;    dcl     3.9888888/4,    -3.9888888/4    ;NaN (very large values)
  2714. ;    dcl    -1.3660254/4,     2.3660254/4
  2715. ;    dcl    -0.3660254/4,     1.3660254/4
  2716. ;    dcl     0.0000000/4,     1.0000000/4
  2717. ;    dcl     0.2113249/4,     0.7886751/4
  2718. ;    dcl     0.3660254/4,     0.6339746/4
  2719. ;    dcl     0.5000000/4,     0.5000000/4
  2720. ;    dcl     0.6339746/4,     0.3660254/4
  2721. ;    dcl     0.7886751/4,     0.2113249/4
  2722. ;    dcl     1.0000000/4,     0.0000000/4
  2723. ;    dcl     1.3660254/4,    -0.3660254/4
  2724. ;    dcl     2.3660254/4,    -1.3660254/4
  2725. ;    dcl     3.9888888/4,    -3.9888888/4    ;NaN (very large values)
  2726. ;    dcl    -1.3660254/4,     2.3660254/4
  2727. ;    dcl    -0.3660254/4,     1.3660254/4
  2728. ;    dcl     0.0000000/4,     1.0000000/4
  2729. ;    dcl     0.2113249/4,     0.7886751/4
  2730. ;    dcl     0.3660254/4,     0.6339746/4
  2731. ;    dcl     0.5000000/4,     0.5000000/4
  2732. ;    dcl     0.6339746/4,     0.3660254/4
  2733. ;    dcl     0.7886751/4,     0.2113249/4
  2734. ;    dcl     1.0000000/4,     0.0000000/4
  2735. ;    dcl     1.3660254/4,    -0.3660254/4
  2736.  
  2737.  
  2738. ;the end
  2739.